From c8c40cf4b0648851029eea52fdd5d97d1e5b4ab2 Mon Sep 17 00:00:00 2001 From: Pratiksha Khandagale Date: Fri, 30 Sep 2022 12:16:36 +0530 Subject: [PATCH] Initial Code --- Dockerfile | 12 + Jenkinsfile | 35 + LICENSE | 21 + angular.json | 147 + e2e/protractor.conf.js | 37 + e2e/src/app.e2e-spec.ts | 23 + e2e/src/app.po.ts | 11 + e2e/tsconfig.json | 13 + karma.conf.js | 44 + nginx-custom.conf | 8 + ngsw-config.json | 37 + package.json | 109 + proxy.conf.json | 25 + src/app/app-routing.module.ts | 104 + src/app/app.component.html | 15 + src/app/app.component.scss | 9 + src/app/app.component.spec.ts | 31 + src/app/app.component.ts | 42 + src/app/app.config.ts | 93 + src/app/app.module.ts | 291 + src/app/authentication/auth-config.service.ts | 32 + .../login/keycloaklogin.component.css | 0 .../login/keycloaklogin.component.html | 1 + .../login/keycloaklogin.component.spec.ts | 25 + .../login/keycloaklogin.component.ts | 47 + .../logout/logout.component.html | 5 + .../logout/logout.component.scss | 0 .../logout/logout.component.spec.ts | 25 + .../authentication/logout/logout.component.ts | 23 + .../create-certificate.component.html | 61 + .../create-certificate.component.scss | 18 + .../create-certificate.component.spec.ts | 26 + .../create-certificate.component.ts | 17 + .../custom-components/faq/faq.component.html | 172 + .../custom-components/faq/faq.component.scss | 14 + .../faq/faq.component.spec.ts | 25 + .../custom-components/faq/faq.component.ts | 15 + .../discovery/search/search.component.html | 117 + .../discovery/search/search.component.scss | 162 + .../discovery/search/search.component.spec.ts | 26 + src/app/discovery/search/search.component.ts | 376 + .../add-document/add-document.component.html | 114 + .../add-document/add-document.component.scss | 0 .../add-document.component.spec.ts | 25 + .../add-document/add-document.component.ts | 369 + .../browse-documents.component.html | 49 + .../browse-documents.component.scss | 41 + .../browse-documents.component.spec.ts | 25 + .../browse-documents.component.ts | 29 + .../doc-detail-view.component.html | 1 + .../doc-detail-view.component.scss | 0 .../doc-detail-view.component.spec.ts | 25 + .../doc-detail-view.component.ts | 15 + src/app/documents/documents.component.html | 514 + src/app/documents/documents.component.scss | 98 + src/app/documents/documents.component.spec.ts | 25 + src/app/documents/documents.component.ts | 128 + .../scan-document.component.html | 18 + .../scan-document.component.scss | 11 + .../scan-document.component.spec.ts | 25 + .../scan-document/scan-document.component.ts | 65 + .../scan-qr-code/scan-qr-code.component.html | 9 + .../scan-qr-code/scan-qr-code.component.scss | 4 + .../scan-qr-code.component.spec.ts | 25 + .../scan-qr-code/scan-qr-code.component.ts | 93 + src/app/forms/forms.component.html | 74 + src/app/forms/forms.component.scss | 107 + src/app/forms/forms.component.spec.ts | 25 + src/app/forms/forms.component.ts | 1338 ++ src/app/forms/types/array.type.ts | 29 + src/app/forms/types/autocomplete.type.ts | 41 + src/app/forms/types/color.type.ts | 22 + src/app/forms/types/file-value-accessor.ts | 24 + src/app/forms/types/file.type.ts | 157 + src/app/forms/types/group.type.ts | 16 + src/app/forms/types/horizontal.wrapper.ts | 23 + src/app/forms/types/multischema.type.ts | 20 + src/app/forms/types/multiselect.type.ts | 20 + src/app/forms/types/null.type.ts | 9 + src/app/forms/types/object.type.ts | 19 + src/app/forms/types/repeat.type.ts | 23 + src/app/header/header.component.html | 90 + src/app/header/header.component.scss | 144 + src/app/header/header.component.spec.ts | 25 + src/app/header/header.component.ts | 97 + src/app/home/home.component.html | 53 + src/app/home/home.component.scss | 226 + src/app/home/home.component.spec.ts | 25 + src/app/home/home.component.ts | 56 + src/app/install/install.component.html | 25 + src/app/install/install.component.scss | 0 src/app/install/install.component.spec.ts | 25 + src/app/install/install.component.ts | 551 + src/app/interfaces/httpOptions.interface.ts | 34 + src/app/json-typings.d.ts | 4 + .../layouts/doc-view/doc-view.component.css | 0 .../layouts/doc-view/doc-view.component.html | 49 + .../doc-view/doc-view.component.spec.ts | 25 + .../layouts/doc-view/doc-view.component.ts | 134 + src/app/layouts/layouts.component.html | 221 + src/app/layouts/layouts.component.scss | 217 + src/app/layouts/layouts.component.spec.ts | 25 + src/app/layouts/layouts.component.ts | 528 + src/app/layouts/modal/modal.directive.ts | 233 + src/app/layouts/modal/modal.ts | 41 + .../panels/add-panel/add-panel.component.css | 0 .../panels/add-panel/add-panel.component.html | 13 + .../add-panel/add-panel.component.spec.ts | 25 + .../panels/add-panel/add-panel.component.ts | 34 + .../edit-panel/edit-panel.component.html | 12 + .../edit-panel/edit-panel.component.scss | 0 .../panels/edit-panel/edit-panel.component.ts | 35 + src/app/layouts/modal/panels/panel.ts | 40 + .../layouts/modal/panels/panels.component.css | 0 .../modal/panels/panels.component.html | 10 + .../layouts/modal/panels/panels.component.ts | 28 + src/app/multilingual.init.ts | 42 + src/app/pages/pages.component.html | 34 + src/app/pages/pages.component.scss | 252 + src/app/pages/pages.component.spec.ts | 25 + src/app/pages/pages.component.ts | 83 + src/app/safe-html.pipe.spec.ts | 8 + src/app/safe-html.pipe.ts | 19 + src/app/services/admin-form.service.ts | 27 + .../data/data-request.service.spec.ts | 16 + src/app/services/data/data-request.service.ts | 166 + src/app/services/data/schema.service.spec.ts | 16 + src/app/services/data/schema.service.ts | 88 + .../services/general/general.service.spec.ts | 16 + src/app/services/general/general.service.ts | 159 + src/app/services/theme/theme.service.spec.ts | 16 + src/app/services/theme/theme.service.ts | 19 + .../toast-message.service.spec.ts | 16 + .../toast-message/toast-message.service.ts | 39 + .../attestation/attestation.component.css | 12 + .../attestation/attestation.component.html | 237 + .../attestation/attestation.component.spec.ts | 25 + .../attestation/attestation.component.ts | 366 + src/app/tables/tables.component.css | 9 + src/app/tables/tables.component.html | 78 + src/app/tables/tables.component.spec.ts | 25 + src/app/tables/tables.component.ts | 133 + src/app/theme.config.ts | 51 + src/app/utility/app.guard.ts | 52 + src/app/utility/app.init.ts | 56 + src/app/utility/keyCloak-login..ts | 31 + src/assets/config/.gitkeep | 0 src/assets/config/config.json | 52 + src/assets/config/home.html | 77 + src/assets/config/swagger.json | 933 ++ src/assets/config/test.json | 88 + src/assets/config/ui-config/forms.json | 593 + src/assets/config/ui-config/headers.json | 88 + src/assets/config/ui-config/layouts.json | 73 + src/assets/config/ui-config/search.json | 140 + src/assets/config/ui-config/tables.json | 91 + src/assets/i18n/global/en-global.json | 189 + src/assets/i18n/global/hi-global.json | 188 + src/assets/i18n/local/en-local.json | 121 + src/assets/i18n/local/hi-local.json | 139 + src/assets/icons/icon-128x128.png | Bin 0 -> 8893 bytes src/assets/icons/icon-144x144.png | Bin 0 -> 10861 bytes src/assets/icons/icon-152x152.png | Bin 0 -> 11825 bytes src/assets/icons/icon-192x192.png | Bin 0 -> 17092 bytes src/assets/icons/icon-384x384.png | Bin 0 -> 32775 bytes src/assets/icons/icon-48x48.png | Bin 0 -> 1852 bytes src/assets/icons/icon-512x512.png | Bin 0 -> 87276 bytes src/assets/icons/icon-72x72.png | Bin 0 -> 3681 bytes src/assets/icons/icon-96x96.png | Bin 0 -> 5781 bytes src/assets/images/home-new.png | Bin 0 -> 19364 bytes src/assets/images/home.png | Bin 0 -> 24498 bytes src/assets/images/home.svg | 441 + src/assets/images/image.png | Bin 0 -> 1545 bytes src/assets/images/logo-1.png | Bin 0 -> 5755 bytes src/assets/images/logo-ndear.png | Bin 0 -> 10914 bytes src/assets/images/logo-sbrc.png | Bin 0 -> 10457 bytes src/assets/images/logo.png | Bin 0 -> 55607 bytes src/assets/images/logout.png | Bin 0 -> 99028 bytes src/assets/images/mobile.png | Bin 0 -> 35255 bytes src/assets/images/ndear.png | Bin 0 -> 10914 bytes src/assets/images/theme.png | Bin 0 -> 25651 bytes src/assets/images/theme_icon.svg | 3 + src/assets/pages/about.html | 85 + src/assets/pages/terms-and-conditions.html | 649 + src/environments/environment.prod.ts | 3 + src/environments/environment.ts | 17 + src/favicon.ico | Bin 0 -> 948 bytes src/index.html | 31 + src/main.ts | 12 + src/manifest.webmanifest | 59 + src/mediaQuery.scss | 7 + src/polyfills.ts | 69 + src/styles.scss | 790 ++ src/test.ts | 25 + tsconfig.app.json | 15 + tsconfig.json | 23 + tsconfig.spec.json | 18 + tslint.json | 152 + yarn.lock | 10446 ++++++++++++++++ 199 files changed, 26707 insertions(+) create mode 100644 Dockerfile create mode 100644 Jenkinsfile create mode 100644 LICENSE create mode 100644 angular.json create mode 100644 e2e/protractor.conf.js create mode 100644 e2e/src/app.e2e-spec.ts create mode 100644 e2e/src/app.po.ts create mode 100644 e2e/tsconfig.json create mode 100644 karma.conf.js create mode 100644 nginx-custom.conf create mode 100644 ngsw-config.json create mode 100644 package.json create mode 100644 proxy.conf.json create mode 100644 src/app/app-routing.module.ts create mode 100644 src/app/app.component.html create mode 100644 src/app/app.component.scss create mode 100644 src/app/app.component.spec.ts create mode 100644 src/app/app.component.ts create mode 100644 src/app/app.config.ts create mode 100644 src/app/app.module.ts create mode 100644 src/app/authentication/auth-config.service.ts create mode 100644 src/app/authentication/login/keycloaklogin.component.css create mode 100644 src/app/authentication/login/keycloaklogin.component.html create mode 100644 src/app/authentication/login/keycloaklogin.component.spec.ts create mode 100644 src/app/authentication/login/keycloaklogin.component.ts create mode 100644 src/app/authentication/logout/logout.component.html create mode 100644 src/app/authentication/logout/logout.component.scss create mode 100644 src/app/authentication/logout/logout.component.spec.ts create mode 100644 src/app/authentication/logout/logout.component.ts create mode 100644 src/app/create-certificate/create-certificate.component.html create mode 100644 src/app/create-certificate/create-certificate.component.scss create mode 100644 src/app/create-certificate/create-certificate.component.spec.ts create mode 100644 src/app/create-certificate/create-certificate.component.ts create mode 100644 src/app/custom-components/faq/faq.component.html create mode 100644 src/app/custom-components/faq/faq.component.scss create mode 100644 src/app/custom-components/faq/faq.component.spec.ts create mode 100644 src/app/custom-components/faq/faq.component.ts create mode 100644 src/app/discovery/search/search.component.html create mode 100644 src/app/discovery/search/search.component.scss create mode 100644 src/app/discovery/search/search.component.spec.ts create mode 100644 src/app/discovery/search/search.component.ts create mode 100644 src/app/documents/add-document/add-document.component.html create mode 100644 src/app/documents/add-document/add-document.component.scss create mode 100644 src/app/documents/add-document/add-document.component.spec.ts create mode 100644 src/app/documents/add-document/add-document.component.ts create mode 100644 src/app/documents/browse-documents/browse-documents.component.html create mode 100644 src/app/documents/browse-documents/browse-documents.component.scss create mode 100644 src/app/documents/browse-documents/browse-documents.component.spec.ts create mode 100644 src/app/documents/browse-documents/browse-documents.component.ts create mode 100644 src/app/documents/doc-detail-view/doc-detail-view.component.html create mode 100644 src/app/documents/doc-detail-view/doc-detail-view.component.scss create mode 100644 src/app/documents/doc-detail-view/doc-detail-view.component.spec.ts create mode 100644 src/app/documents/doc-detail-view/doc-detail-view.component.ts create mode 100644 src/app/documents/documents.component.html create mode 100644 src/app/documents/documents.component.scss create mode 100644 src/app/documents/documents.component.spec.ts create mode 100644 src/app/documents/documents.component.ts create mode 100644 src/app/documents/scan-document/scan-document.component.html create mode 100644 src/app/documents/scan-document/scan-document.component.scss create mode 100644 src/app/documents/scan-document/scan-document.component.spec.ts create mode 100644 src/app/documents/scan-document/scan-document.component.ts create mode 100644 src/app/documents/scan-qr-code/scan-qr-code.component.html create mode 100644 src/app/documents/scan-qr-code/scan-qr-code.component.scss create mode 100644 src/app/documents/scan-qr-code/scan-qr-code.component.spec.ts create mode 100644 src/app/documents/scan-qr-code/scan-qr-code.component.ts create mode 100644 src/app/forms/forms.component.html create mode 100644 src/app/forms/forms.component.scss create mode 100644 src/app/forms/forms.component.spec.ts create mode 100644 src/app/forms/forms.component.ts create mode 100644 src/app/forms/types/array.type.ts create mode 100644 src/app/forms/types/autocomplete.type.ts create mode 100644 src/app/forms/types/color.type.ts create mode 100644 src/app/forms/types/file-value-accessor.ts create mode 100644 src/app/forms/types/file.type.ts create mode 100644 src/app/forms/types/group.type.ts create mode 100644 src/app/forms/types/horizontal.wrapper.ts create mode 100644 src/app/forms/types/multischema.type.ts create mode 100644 src/app/forms/types/multiselect.type.ts create mode 100644 src/app/forms/types/null.type.ts create mode 100644 src/app/forms/types/object.type.ts create mode 100644 src/app/forms/types/repeat.type.ts create mode 100644 src/app/header/header.component.html create mode 100644 src/app/header/header.component.scss create mode 100644 src/app/header/header.component.spec.ts create mode 100644 src/app/header/header.component.ts create mode 100644 src/app/home/home.component.html create mode 100644 src/app/home/home.component.scss create mode 100644 src/app/home/home.component.spec.ts create mode 100644 src/app/home/home.component.ts create mode 100644 src/app/install/install.component.html create mode 100644 src/app/install/install.component.scss create mode 100644 src/app/install/install.component.spec.ts create mode 100644 src/app/install/install.component.ts create mode 100644 src/app/interfaces/httpOptions.interface.ts create mode 100644 src/app/json-typings.d.ts create mode 100644 src/app/layouts/doc-view/doc-view.component.css create mode 100644 src/app/layouts/doc-view/doc-view.component.html create mode 100644 src/app/layouts/doc-view/doc-view.component.spec.ts create mode 100644 src/app/layouts/doc-view/doc-view.component.ts create mode 100644 src/app/layouts/layouts.component.html create mode 100644 src/app/layouts/layouts.component.scss create mode 100644 src/app/layouts/layouts.component.spec.ts create mode 100644 src/app/layouts/layouts.component.ts create mode 100644 src/app/layouts/modal/modal.directive.ts create mode 100644 src/app/layouts/modal/modal.ts create mode 100644 src/app/layouts/modal/panels/add-panel/add-panel.component.css create mode 100644 src/app/layouts/modal/panels/add-panel/add-panel.component.html create mode 100644 src/app/layouts/modal/panels/add-panel/add-panel.component.spec.ts create mode 100644 src/app/layouts/modal/panels/add-panel/add-panel.component.ts create mode 100644 src/app/layouts/modal/panels/edit-panel/edit-panel.component.html create mode 100644 src/app/layouts/modal/panels/edit-panel/edit-panel.component.scss create mode 100644 src/app/layouts/modal/panels/edit-panel/edit-panel.component.ts create mode 100644 src/app/layouts/modal/panels/panel.ts create mode 100644 src/app/layouts/modal/panels/panels.component.css create mode 100644 src/app/layouts/modal/panels/panels.component.html create mode 100644 src/app/layouts/modal/panels/panels.component.ts create mode 100644 src/app/multilingual.init.ts create mode 100644 src/app/pages/pages.component.html create mode 100644 src/app/pages/pages.component.scss create mode 100644 src/app/pages/pages.component.spec.ts create mode 100644 src/app/pages/pages.component.ts create mode 100644 src/app/safe-html.pipe.spec.ts create mode 100644 src/app/safe-html.pipe.ts create mode 100644 src/app/services/admin-form.service.ts create mode 100644 src/app/services/data/data-request.service.spec.ts create mode 100644 src/app/services/data/data-request.service.ts create mode 100644 src/app/services/data/schema.service.spec.ts create mode 100644 src/app/services/data/schema.service.ts create mode 100644 src/app/services/general/general.service.spec.ts create mode 100644 src/app/services/general/general.service.ts create mode 100644 src/app/services/theme/theme.service.spec.ts create mode 100644 src/app/services/theme/theme.service.ts create mode 100644 src/app/services/toast-message/toast-message.service.spec.ts create mode 100644 src/app/services/toast-message/toast-message.service.ts create mode 100644 src/app/tables/attestation/attestation.component.css create mode 100644 src/app/tables/attestation/attestation.component.html create mode 100644 src/app/tables/attestation/attestation.component.spec.ts create mode 100644 src/app/tables/attestation/attestation.component.ts create mode 100644 src/app/tables/tables.component.css create mode 100644 src/app/tables/tables.component.html create mode 100644 src/app/tables/tables.component.spec.ts create mode 100644 src/app/tables/tables.component.ts create mode 100644 src/app/theme.config.ts create mode 100644 src/app/utility/app.guard.ts create mode 100644 src/app/utility/app.init.ts create mode 100644 src/app/utility/keyCloak-login..ts create mode 100644 src/assets/config/.gitkeep create mode 100644 src/assets/config/config.json create mode 100644 src/assets/config/home.html create mode 100644 src/assets/config/swagger.json create mode 100644 src/assets/config/test.json create mode 100644 src/assets/config/ui-config/forms.json create mode 100644 src/assets/config/ui-config/headers.json create mode 100644 src/assets/config/ui-config/layouts.json create mode 100644 src/assets/config/ui-config/search.json create mode 100644 src/assets/config/ui-config/tables.json create mode 100644 src/assets/i18n/global/en-global.json create mode 100644 src/assets/i18n/global/hi-global.json create mode 100644 src/assets/i18n/local/en-local.json create mode 100644 src/assets/i18n/local/hi-local.json create mode 100644 src/assets/icons/icon-128x128.png create mode 100644 src/assets/icons/icon-144x144.png create mode 100644 src/assets/icons/icon-152x152.png create mode 100644 src/assets/icons/icon-192x192.png create mode 100644 src/assets/icons/icon-384x384.png create mode 100644 src/assets/icons/icon-48x48.png create mode 100644 src/assets/icons/icon-512x512.png create mode 100644 src/assets/icons/icon-72x72.png create mode 100644 src/assets/icons/icon-96x96.png create mode 100644 src/assets/images/home-new.png create mode 100644 src/assets/images/home.png create mode 100644 src/assets/images/home.svg create mode 100644 src/assets/images/image.png create mode 100644 src/assets/images/logo-1.png create mode 100644 src/assets/images/logo-ndear.png create mode 100644 src/assets/images/logo-sbrc.png create mode 100644 src/assets/images/logo.png create mode 100644 src/assets/images/logout.png create mode 100644 src/assets/images/mobile.png create mode 100644 src/assets/images/ndear.png create mode 100644 src/assets/images/theme.png create mode 100644 src/assets/images/theme_icon.svg create mode 100644 src/assets/pages/about.html create mode 100644 src/assets/pages/terms-and-conditions.html create mode 100644 src/environments/environment.prod.ts create mode 100644 src/environments/environment.ts create mode 100644 src/favicon.ico create mode 100644 src/index.html create mode 100644 src/main.ts create mode 100644 src/manifest.webmanifest create mode 100644 src/mediaQuery.scss create mode 100644 src/polyfills.ts create mode 100644 src/styles.scss create mode 100644 src/test.ts create mode 100644 tsconfig.app.json create mode 100644 tsconfig.json create mode 100644 tsconfig.spec.json create mode 100644 tslint.json create mode 100644 yarn.lock diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..6e2ffd9 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,12 @@ +# Stage 1: Build an Angular Docker Image +FROM node as build +WORKDIR /app +COPY package*.json /app/ +RUN npm install +COPY . /app +ARG configuration=production +RUN npm run build -- --outputPath=./dist/out --configuration $configuration +# Stage 2, use the compiled app, ready for production with Nginx +FROM nginx +COPY --from=build /app/dist/out/ /usr/share/nginx/html +COPY /nginx-custom.conf /etc/nginx/conf.d/default.conf diff --git a/Jenkinsfile b/Jenkinsfile new file mode 100644 index 0000000..266fd63 --- /dev/null +++ b/Jenkinsfile @@ -0,0 +1,35 @@ +pipeline { + environment { + imagename = "paraspatel1434/sunbird-rc-ui" + registryCredential = 'dockerhub-ui' + dockerImage = '' + } + agent any + stages { + stage('Building image') { + steps{ + script { + dockerImage = docker.build imagename + } + } + } + stage('Deploy Image') { + steps{ + script { + docker.withRegistry( '', registryCredential ) { + dockerImage.push("$BUILD_NUMBER") + dockerImage.push('latest') + + } + } + } + } + stage('Remove Unused docker image') { + steps{ + sh "docker rmi $imagename:$BUILD_NUMBER" + sh "docker rmi $imagename:latest" + + } + } + } +} \ No newline at end of file diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..7f9d96e --- /dev/null +++ b/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2021 Sunbird Registries & Credentials + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/angular.json b/angular.json new file mode 100644 index 0000000..a4cccc1 --- /dev/null +++ b/angular.json @@ -0,0 +1,147 @@ +{ + "$schema": "./node_modules/@angular/cli/lib/config/schema.json", + "cli": { + "analytics": false + }, + "version": 1, + "newProjectRoot": "projects", + "projects": { + "opensaber-rc-ui": { + "projectType": "application", + "schematics": { + "@schematics/angular:component": { + "style": "scss" + } + }, + "root": "", + "sourceRoot": "src", + "prefix": "app", + "architect": { + "build": { + "builder": "@angular-devkit/build-angular:browser", + "options": { + "outputPath": "dist/sunbird-rc-ui", + "index": "src/index.html", + "main": "src/main.ts", + "polyfills": "src/polyfills.ts", + "tsConfig": "tsconfig.app.json", + "aot": true, + "assets": [ + "src/favicon.ico", + "src/assets", + "src/manifest.webmanifest", + { + "glob": "**/*", + "input": "node_modules/ngx-extended-pdf-viewer/assets/", + "output": "/assets/" + } + ], + "styles": [ + "src/styles.scss", + "src/mediaQuery.scss", + "./node_modules/bootstrap/dist/css/bootstrap.min.css", + "node_modules/ngx-toastr/toastr.css" + + ], + "scripts": [ + "./node_modules/bootstrap/dist/js/bootstrap.min.js" + + ] + }, + "configurations": { + "production": { + "fileReplacements": [ + { + "replace": "src/environments/environment.ts", + "with": "src/environments/environment.prod.ts" + } + ], + "optimization": true, + "outputHashing": "all", + "sourceMap": false, + "namedChunks": false, + "extractLicenses": true, + "vendorChunk": false, + "buildOptimizer": true, + "budgets": [ + { + "type": "initial", + "maximumWarning": "2mb", + "maximumError": "5mb" + }, + { + "type": "anyComponentStyle", + "maximumWarning": "6kb", + "maximumError": "10kb" + } + ], + "serviceWorker": true, + "ngswConfigPath": "ngsw-config.json" + } + } + }, + "serve": { + "builder": "@angular-devkit/build-angular:dev-server", + "options": { + "browserTarget": "opensaber-rc-ui:build" + }, + "configurations": { + "production": { + "browserTarget": "opensaber-rc-ui:build:production" + } + } + }, + "extract-i18n": { + "builder": "@angular-devkit/build-angular:extract-i18n", + "options": { + "browserTarget": "opensaber-rc-ui:build" + } + }, + "test": { + "builder": "@angular-devkit/build-angular:karma", + "options": { + "main": "src/test.ts", + "polyfills": "src/polyfills.ts", + "tsConfig": "tsconfig.spec.json", + "karmaConfig": "karma.conf.js", + "assets": [ + "src/favicon.ico", + "src/assets", + "src/manifest.webmanifest" + ], + "styles": [ + "src/styles.scss" + ], + "scripts": [] + } + }, + "lint": { + "builder": "@angular-devkit/build-angular:tslint", + "options": { + "tsConfig": [ + "tsconfig.app.json", + "tsconfig.spec.json", + "e2e/tsconfig.json" + ], + "exclude": [ + "**/node_modules/**" + ] + } + }, + "e2e": { + "builder": "@angular-devkit/build-angular:protractor", + "options": { + "protractorConfig": "e2e/protractor.conf.js", + "devServerTarget": "opensaber-rc-ui:serve" + }, + "configurations": { + "production": { + "devServerTarget": "opensaber-rc-ui:serve:production" + } + } + } + } + } + }, + "defaultProject": "opensaber-rc-ui" +} diff --git a/e2e/protractor.conf.js b/e2e/protractor.conf.js new file mode 100644 index 0000000..361e7f0 --- /dev/null +++ b/e2e/protractor.conf.js @@ -0,0 +1,37 @@ +// @ts-check +// Protractor configuration file, see link for more information +// https://github.com/angular/protractor/blob/master/lib/config.ts + +const { SpecReporter, StacktraceOption } = require('jasmine-spec-reporter'); + +/** + * @type { import("protractor").Config } + */ +exports.config = { + allScriptsTimeout: 11000, + specs: [ + './src/**/*.e2e-spec.ts' + ], + capabilities: { + browserName: 'chrome' + }, + directConnect: true, + SELENIUM_PROMISE_MANAGER: false, + baseUrl: 'http://localhost:4200/', + framework: 'jasmine', + jasmineNodeOpts: { + showColors: true, + defaultTimeoutInterval: 30000, + print: function() {} + }, + onPrepare() { + require('ts-node').register({ + project: require('path').join(__dirname, './tsconfig.json') + }); + jasmine.getEnv().addReporter(new SpecReporter({ + spec: { + displayStacktrace: StacktraceOption.PRETTY + } + })); + } +}; \ No newline at end of file diff --git a/e2e/src/app.e2e-spec.ts b/e2e/src/app.e2e-spec.ts new file mode 100644 index 0000000..a142b22 --- /dev/null +++ b/e2e/src/app.e2e-spec.ts @@ -0,0 +1,23 @@ +import { browser, logging } from 'protractor'; +import { AppPage } from './app.po'; + +describe('workspace-project App', () => { + let page: AppPage; + + beforeEach(() => { + page = new AppPage(); + }); + + it('should display welcome message', async () => { + await page.navigateTo(); + expect(await page.getTitleText()).toEqual('opensaber-rc-ui app is running!'); + }); + + afterEach(async () => { + // Assert that there are no errors emitted from the browser + const logs = await browser.manage().logs().get(logging.Type.BROWSER); + expect(logs).not.toContain(jasmine.objectContaining({ + level: logging.Level.SEVERE, + } as logging.Entry)); + }); +}); diff --git a/e2e/src/app.po.ts b/e2e/src/app.po.ts new file mode 100644 index 0000000..c9c85ab --- /dev/null +++ b/e2e/src/app.po.ts @@ -0,0 +1,11 @@ +import { browser, by, element } from 'protractor'; + +export class AppPage { + async navigateTo(): Promise { + return browser.get(browser.baseUrl); + } + + async getTitleText(): Promise { + return element(by.css('app-root .content span')).getText(); + } +} diff --git a/e2e/tsconfig.json b/e2e/tsconfig.json new file mode 100644 index 0000000..0782539 --- /dev/null +++ b/e2e/tsconfig.json @@ -0,0 +1,13 @@ +/* To learn more about this file see: https://angular.io/config/tsconfig. */ +{ + "extends": "../tsconfig.json", + "compilerOptions": { + "outDir": "../out-tsc/e2e", + "module": "commonjs", + "target": "es2018", + "types": [ + "jasmine", + "node" + ] + } +} diff --git a/karma.conf.js b/karma.conf.js new file mode 100644 index 0000000..b464f3b --- /dev/null +++ b/karma.conf.js @@ -0,0 +1,44 @@ +// Karma configuration file, see link for more information +// https://karma-runner.github.io/1.0/config/configuration-file.html + +module.exports = function (config) { + config.set({ + basePath: '', + frameworks: ['jasmine', '@angular-devkit/build-angular'], + plugins: [ + require('karma-jasmine'), + require('karma-chrome-launcher'), + require('karma-jasmine-html-reporter'), + require('karma-coverage'), + require('@angular-devkit/build-angular/plugins/karma') + ], + client: { + jasmine: { + // you can add configuration options for Jasmine here + // the possible options are listed at https://jasmine.github.io/api/edge/Configuration.html + // for example, you can disable the random execution with `random: false` + // or set a specific seed with `seed: 4321` + }, + clearContext: false // leave Jasmine Spec Runner output visible in browser + }, + jasmineHtmlReporter: { + suppressAll: true // removes the duplicated traces + }, + coverageReporter: { + dir: require('path').join(__dirname, './coverage/opensaber-rc-ui'), + subdir: '.', + reporters: [ + { type: 'html' }, + { type: 'text-summary' } + ] + }, + reporters: ['progress', 'kjhtml'], + port: 9876, + colors: true, + logLevel: config.LOG_INFO, + autoWatch: true, + browsers: ['Chrome'], + singleRun: false, + restartOnFileChange: true + }); +}; diff --git a/nginx-custom.conf b/nginx-custom.conf new file mode 100644 index 0000000..177e2aa --- /dev/null +++ b/nginx-custom.conf @@ -0,0 +1,8 @@ +server { +listen 80; +location / { +root /usr/share/nginx/html; +index index.html index.htm; +try_files $uri $uri/ /index.html =404; +} +} \ No newline at end of file diff --git a/ngsw-config.json b/ngsw-config.json new file mode 100644 index 0000000..1ea4d31 --- /dev/null +++ b/ngsw-config.json @@ -0,0 +1,37 @@ +{ + "$schema": "./node_modules/@angular/service-worker/config/schema.json", + "index": "/index.html", + "assetGroups": [ + { + "name": "app", + "installMode": "prefetch", + "resources": { + "files": [ + "/favicon.ico", + "/index.html", + "/manifest.webmanifest", + "/*.css", + "/*.js" + ] + } + }, + { + "name": "assets", + "installMode": "lazy", + "updateMode": "prefetch", + "resources": { + "files": [ + "/assets/**", + "/*.(eot|svg|cur|jpg|png|webp|gif|otf|ttf|woff|woff2|ani)" + ] + } + } + ], + "navigationUrls": [ + "/**", + "!/auth/**/**", + "!/registry/**/**", + "!/minio/**/**", + "!/print/**/**" + ] +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..58119e0 --- /dev/null +++ b/package.json @@ -0,0 +1,109 @@ +{ + "name": "opensaber-rc-ui", + "version": "0.0.0", + "license": "MIT", + "scripts": { + "ng": "ng", + "start": "ng serve --proxy-config proxy.conf.json", + "start1": "ng serve", + "build": "ng build --prod", + "test": "ng test", + "lint": "ng lint", + "e2e": "ng e2e" + }, + "private": true, + "proxy": "https://elocker.xiv.in", + "dependencies": { + "@ajsf/bootstrap4": "^0.4.0-beta.1", + "@altack/quar": "0.0.7", + "@angular/animations": "^10.0.1", + "@angular/cdk": "^10.0.1", + "@angular/cli": "^10.0.0", + "@angular/common": "^10.0.1", + "@angular/compiler": "^10.0.1", + "@angular/compiler-cli": "^10.0.1", + "@angular/core": "^10.0.1", + "@angular/flex-layout": "^10.0.0-beta.32", + "@angular/forms": "^10.2.5", + "@angular/localize": "^10.0.1", + "@angular/material": "^10.0.1", + "@angular/platform-browser": "^10.0.1", + "@angular/platform-browser-dynamic": "^10.0.1", + "@angular/router": "^10.0.1", + "@angular/service-worker": "^10.0.1", + "@fortawesome/fontawesome-free": "^5.15.4", + "@jsonforms/angular": "^2.5.0", + "@jsonforms/angular-material": "^2.5.0", + "@jsonforms/core": "^2.5.0", + "@material/fab": "^13.0.0", + "@ng-bootstrap/ng-bootstrap": "^8.0.4", + "@ng-select/ng-select": "^7.2.0", + "@ngx-formly/bootstrap": "^5.10.21", + "@ngx-formly/core": "^5.10.22", + "@ngx-formly/material": "^5.10.22", + "@ngx-translate/core": "^13.0.0", + "@ngx-translate/http-loader": "^7.0.0", + "@zxing/browser": "0.0.10", + "@zxing/library": "^0.18.6", + "ajv": "^6.10.2", + "angular-ng-autocomplete": "^2.0.5", + "angular2-multiselect-dropdown": "^5.0.4", + "angular6-json-schema-form": "^8.0.0", + "bootstrap": "^4.5.0", + "core-js": "^2.4.1", + "country-state-city": "^3.0.1", + "iso-639-1": "^2.1.11", + "jexl": "^2.3.0", + "json-refs": "^3.0.4", + "keycloak-angular": "^8.1.0", + "keycloak-js": "^11.0.3", + "libphonenumber-js": "^1.6.8", + "lodash-es": "^4.17.21", + "mdb-angular-ui-kit": "^1.0.0-beta3", + "ng-otp-input": "^1.7.1", + "ng2-semantic-ui": "^0.9.7", + "ngx-color-picker": "^11.0.0", + "ngx-extended-pdf-viewer": "^10.1.0", + "ngx-pagination": "^5.1.1", + "ngx-schema-form": "^2.6.5", + "ngx-toastr": "^13.2.1", + "ngx-webcam": "^0.3.2", + "path": "^0.12.7", + "random-words": "^1.1.0", + "redux": "4.0.1", + "rxjs": "^6.5.4", + "tslib": "^2.0.0", + "typescript": "3.9.5", + "write-json-file": "^5.0.0", + "z-schema": "^5.0.0", + "zone.js": "~0.10.3" + }, + "devDependencies": { + "@angular-devkit/build-angular": "~0.1000.0", + "@angular/cli": "^10.0.0", + "@angular/compiler-cli": "^10.0.1", + "@angular/language-service": "^10.0.1", + "@ngx-formly/schematics": "^5.10.21", + "@types/jasmine": "~2.8.3", + "@types/jasminewd2": "~2.0.2", + "@types/node": "^12.11.1", + "codelyzer": "^5.1.2", + "jasmine-core": "~3.5.0", + "jasmine-spec-reporter": "~5.0.0", + "karma": "~5.0.0", + "karma-chrome-launcher": "~3.1.0", + "karma-coverage-istanbul-reporter": "~3.0.2", + "karma-jasmine": "~3.3.0", + "karma-jasmine-html-reporter": "^1.5.0", + "protractor": "~7.0.0", + "redux-logger": "^3.0.6", + "ts-node": "~4.1.0", + "tslint": "~6.1.0", + "typescript": "3.9.5" + }, + "browser": { + "http": false, + "https": false + } +} + diff --git a/proxy.conf.json b/proxy.conf.json new file mode 100644 index 0000000..d3cc29a --- /dev/null +++ b/proxy.conf.json @@ -0,0 +1,25 @@ +{ + "/api/v1": { + "target": "http://localhost:8081", + "changeOrigin": true, + "logLevel": "debug", + "secure": false + + }, + + "/api": { + "target": "http://localhost:8081", + "changeOrigin": true, + "logLevel": "debug", + "secure": false + + }, + + "/api/docs": { + "target": "http://localhost:8081", + "changeOrigin": true, + "logLevel": "debug", + "secure": false + + } + } diff --git a/src/app/app-routing.module.ts b/src/app/app-routing.module.ts new file mode 100644 index 0000000..76dcd91 --- /dev/null +++ b/src/app/app-routing.module.ts @@ -0,0 +1,104 @@ +import { NgModule } from '@angular/core'; +import { RouterModule, Routes } from '@angular/router'; +import { FormsComponent } from './forms/forms.component'; +import { LayoutsComponent } from './layouts/layouts.component'; +import { PanelsComponent } from './layouts/modal/panels/panels.component'; +import { EditPanelComponent } from './layouts/modal/panels/edit-panel/edit-panel.component'; +import { AddPanelComponent } from './layouts/modal/panels/add-panel/add-panel.component'; +import { TablesComponent } from './tables/tables.component'; +import { AttestationComponent } from './tables/attestation/attestation.component'; +import { AuthGuard } from './utility/app.guard'; +import { DocViewComponent } from './layouts/doc-view/doc-view.component'; +import { InstallComponent } from './install/install.component'; +import { HomeComponent } from './home/home.component'; +import { KeycloakloginComponent } from './authentication/login/keycloaklogin.component'; +import { LogoutComponent } from './authentication/logout/logout.component'; +import { SearchComponent } from './discovery/search/search.component'; +import { DocumentsComponent } from './documents/documents.component'; +import { AddDocumentComponent } from './documents/add-document/add-document.component'; +import { ScanQrCodeComponent } from './documents/scan-qr-code/scan-qr-code.component'; +import { BrowseDocumentsComponent } from './documents/browse-documents/browse-documents.component'; +import { PagesComponent } from './pages/pages.component'; +import { DocDetailViewComponent } from './documents/doc-detail-view/doc-detail-view.component'; +// import { CreateCertificateComponent } from './create-certificate/create-certificate.component'; +// import { FaqComponent } from './custom-components/faq/faq.component'; +const routes: Routes = [ +// Home +{ path: '', component: HomeComponent }, + +// Auth +{ path: 'login', component: KeycloakloginComponent , canActivate: [AuthGuard]}, +{ path: 'logout', component: LogoutComponent}, + +// Forms +{ path: 'form/:form', component: FormsComponent }, +{ path: 'form/:form/:id', component: FormsComponent, canActivate: [AuthGuard] }, + + +// Layouts +// { path: ':layout', component: LayoutsComponent, canActivate: [AuthGuard] }, +{ + path: 'profile/:layout', component: LayoutsComponent, + canActivate: [AuthGuard], + children: [ + { + path: 'edit', + component: PanelsComponent, + outlet: 'claim', + children: [ + { + path: ':form', + component: EditPanelComponent + }, + { + path: ':form/:id', + component: EditPanelComponent + } + ] + }, + { + path: 'add', + component: PanelsComponent, + outlet: 'claim', + children: [ + { + path: ':form', + component: AddPanelComponent + } + ] + } + ] +}, + +// Pages +{ path: 'page/:page', component: PagesComponent }, + +// Tables +{ path: ':entity/attestation/:table', component: TablesComponent, canActivate: [AuthGuard] }, +{ path: ':entity/attestation/:table/:id', component: AttestationComponent, canActivate: [AuthGuard] }, +{ path: ':entity/documents', component: DocumentsComponent, canActivate: [AuthGuard] }, +{ path: ':entity/documents/detail/view/:type/:id', component: DocDetailViewComponent, canActivate: [AuthGuard] }, +{ path: ':entity/documents/view/:type/:id', component: DocViewComponent, canActivate: [AuthGuard] }, +{ path: ':entity/documents/browse', component: BrowseDocumentsComponent, canActivate: [AuthGuard] }, +{ path: ':entity/documents/:type/add/:id', component: AddDocumentComponent, canActivate: [AuthGuard] }, +{ path: ':entity/documents/add/:type', component: AddDocumentComponent, canActivate: [AuthGuard] }, +{ path: ':entity/documents/add/:type/:id', component: AddDocumentComponent, canActivate: [AuthGuard] }, +{ path: ':entity/documents/scan/vc', component: ScanQrCodeComponent, canActivate: [AuthGuard] }, +// { path: 'document/detail', component: DocDetailViewComponent, canActivate: [AuthGuard] }, +// { path: 'document/view/:id', component: DocViewComponent, canActivate: [AuthGuard] }, +{ path: 'discovery', component: SearchComponent }, +// { path: 'template', component: CreateCertificateComponent }, + + +// Installation +{ path: 'install', component: InstallComponent }, + +// Custom +// { path: 'faq', component: FaqComponent }, +]; + +@NgModule({ + imports: [RouterModule.forRoot(routes)], + exports: [RouterModule] +}) +export class AppRoutingModule { } diff --git a/src/app/app.component.html b/src/app/app.component.html new file mode 100644 index 0000000..6e64774 --- /dev/null +++ b/src/app/app.component.html @@ -0,0 +1,15 @@ + + + + + +
+ +
+ diff --git a/src/app/app.component.scss b/src/app/app.component.scss new file mode 100644 index 0000000..0aab66b --- /dev/null +++ b/src/app/app.component.scss @@ -0,0 +1,9 @@ +.footer { + background: black; + + color: #8D9091; + display: flex; + justify-content: space-between; + align-items: center; + height:50px; +} diff --git a/src/app/app.component.spec.ts b/src/app/app.component.spec.ts new file mode 100644 index 0000000..8803367 --- /dev/null +++ b/src/app/app.component.spec.ts @@ -0,0 +1,31 @@ +import { TestBed } from '@angular/core/testing'; +import { AppComponent } from './app.component'; + +describe('AppComponent', () => { + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [ + AppComponent + ], + }).compileComponents(); + }); + + it('should create the app', () => { + const fixture = TestBed.createComponent(AppComponent); + const app = fixture.componentInstance; + expect(app).toBeTruthy(); + }); + + it(`should have as title 'opensaber-rc-ui'`, () => { + const fixture = TestBed.createComponent(AppComponent); + const app = fixture.componentInstance; + expect(app.title).toEqual('opensaber-rc-ui'); + }); + + it('should render title', () => { + const fixture = TestBed.createComponent(AppComponent); + fixture.detectChanges(); + const compiled = fixture.nativeElement; + expect(compiled.querySelector('.content span').textContent).toContain('opensaber-rc-ui app is running!'); + }); +}); diff --git a/src/app/app.component.ts b/src/app/app.component.ts new file mode 100644 index 0000000..fa0f5f9 --- /dev/null +++ b/src/app/app.component.ts @@ -0,0 +1,42 @@ +import { Component } from '@angular/core'; +import { AppConfig } from './app.config'; +import { ThemeService } from "../app/services/theme/theme.service"; + +@Component({ + selector: 'app-root', + templateUrl: './app.component.html', + styleUrls: ['./app.component.scss'] +}) +export class AppComponent { + footerText = 'Sunbird RC'; + isFooter = false; + ELOCKER_THEME; + constructor(private config: AppConfig, private themeService: ThemeService) { + + if(this.config.getEnv('appType') && this.config.getEnv('appType') != 'digital_wallet'){ + this.isFooter = true; + if(window.location.pathname != '/install'){ + this.footerText = this.config.getEnv('footerText'); + } + } + + + this.ELOCKER_THEME = localStorage.getItem('ELOCKER_THEME'); + + if (this.ELOCKER_THEME) { + this.themeService.setTheme(this.ELOCKER_THEME); + } + + // changeTheme() { + // if (this.ELOCKER_THEME == 'default') { + // this.ELOCKER_THEME = "dark"; + // } else { + // this.ELOCKER_THEME = "default"; + // } + // this.themeService.setTheme(this.ELOCKER_THEME); + // localStorage.setItem('ELOCKER_THEME', this.ELOCKER_THEME); + // } + + + } +} diff --git a/src/app/app.config.ts b/src/app/app.config.ts new file mode 100644 index 0000000..36a7af5 --- /dev/null +++ b/src/app/app.config.ts @@ -0,0 +1,93 @@ +import { Inject, Injectable } from '@angular/core'; +import { HttpClient } from '@angular/common/http'; +import { Observable, throwError } from 'rxjs'; +import { map } from 'rxjs/operators'; +import { catchError } from 'rxjs/operators'; +import { Router } from '@angular/router'; +import { Title } from '@angular/platform-browser'; + +@Injectable() +export class AppConfig { + + private config: Object = null; + private environment: Object = null; + + constructor(private http: HttpClient, public router: Router, private titleService: Title) { + + } + + /** + * Use to get the data found in the second file (config file) + */ + public getConfig(key: any) { + return this.config[key]; + } + + /** + * Use to get the data found in the first file (environment file) + */ + public getEnv(key: any) { + try { + return this.environment[key]; + } + catch(err) { + this.router.navigate(['install']) + } + } + + /** + * This method: + * a) Loads "environment.json" to get the current working environment (e.g.: 'production', 'development') + * b) Loads "config.[environment].json" to get all environment's variables (e.g.: 'config.development.json') + */ + public load() { + return new Promise((resolve, reject) => { + this.http.get('/assets/config/config.json').subscribe((envResponse) => { + this.environment= envResponse; + let request:any = null; + + switch (envResponse['environment']) { + case 'production': { + console.log("in production") + request = this.http.get('/assets/config/config.json'); + } break; + + case 'development': { + console.log("in development") + request = this.http.get('/assets/config/config.json'); + } break; + + case 'install': { + console.error('environment is not set or invalid in config.json file'); + this.router.navigate(['install']) + resolve(true); + } break; + } + + if (request) { + request + .subscribe((responseData) => { + this.config = responseData; + this.titleService.setTitle(responseData.title); + resolve(true); + }, err => {console.log('Error reading config.json configuration file . Please find Sample ->> https://demo-education-registry.xiv.in/assets/config/config.json', err); + // this.titleService.setTitle("Sunbird RC"); + this.router.navigate(['install'])}); + } else { + console.error('config.json file is not valid . Please find Sample ->> https://demo-education-registry.xiv.in/assets/config/config.json'); + // this.titleService.setTitle("Sunbird RC"); + this.router.navigate(['install']) + resolve(true); + } + }, + + err => {console.log('Error reading config.json configuration file. Please find Sample ->> https://demo-education-registry.xiv.in/assets/config/config.json', err); + // this.titleService.setTitle("Sunbird RC"); + this.router.navigate(['install']) + resolve(true); + } + ); + + }); + } +} diff --git a/src/app/app.module.ts b/src/app/app.module.ts new file mode 100644 index 0000000..9db2040 --- /dev/null +++ b/src/app/app.module.ts @@ -0,0 +1,291 @@ +import { HttpClientModule } from '@angular/common/http'; +import { NgModule, CUSTOM_ELEMENTS_SCHEMA } from '@angular/core'; +import { BrowserModule } from '@angular/platform-browser'; +import { BrowserAnimationsModule } from '@angular/platform-browser/animations'; +import { AppComponent } from './app.component'; +import { AppRoutingModule } from './app-routing.module'; +import { FormsModule, ReactiveFormsModule } from '@angular/forms'; +import { NgbModule } from '@ng-bootstrap/ng-bootstrap'; +import { NgbAccordionModule } from '@ng-bootstrap/ng-bootstrap'; +import { ToastrModule } from 'ngx-toastr'; +import { APP_INITIALIZER } from '@angular/core'; +import { KeycloakAngularModule, KeycloakService } from 'keycloak-angular'; +import { NgSelectModule } from '@ng-select/ng-select'; +import { NgxPaginationModule } from 'ngx-pagination'; +import { AngularMultiSelectModule } from 'angular2-multiselect-dropdown'; +// formly +import { FormlyModule, FormlyFieldConfig } from '@ngx-formly/core'; +import { FormlyBootstrapModule } from '@ngx-formly/bootstrap'; +import { ArrayTypeComponent } from '../app/forms/types/array.type'; +import { ObjectTypeComponent } from '../app/forms/types/object.type'; +import { MultiSchemaTypeComponent } from '../app/forms/types/multischema.type'; +import { NullTypeComponent } from '../app/forms/types/null.type'; +import { AutocompleteTypeComponent } from '../app/forms/types/autocomplete.type'; +import { FormlyColorInput } from '../app/forms/types/color.type'; +import { initializeKeycloak } from './utility/app.init'; +import { initLang } from './multilingual.init'; + + +//Local imports +import { FormsComponent } from './forms/forms.component'; +import { LayoutsComponent } from './layouts/layouts.component'; +import { ModalRouterEditLinkDirective } from '../app/layouts/modal/modal.directive'; +import { ModalRouterAddLinkDirective } from '../app/layouts/modal/modal.directive'; +import { PanelsComponent } from './layouts/modal/panels/panels.component'; +import { EditPanelComponent } from './layouts/modal/panels/edit-panel/edit-panel.component'; +import { AddPanelComponent } from './layouts/modal/panels/add-panel/add-panel.component'; +import { TablesComponent } from './tables/tables.component'; +import { HeaderComponent } from './header/header.component'; +import { FormlyFieldFile } from './forms/types/file.type'; +import { FileValueAccessor } from './forms/types/file-value-accessor'; +import { DocViewComponent } from './layouts/doc-view/doc-view.component'; +import { FormlyFieldNgSelect } from './forms/types/multiselect.type'; +import { Bootstrap4FrameworkModule } from 'angular6-json-schema-form'; +import { MAT_FORM_FIELD_DEFAULT_OPTIONS } from '@angular/material/form-field'; +import { AttestationComponent } from './tables/attestation/attestation.component'; +import { InstallComponent } from './install/install.component'; +import { HomeComponent } from './home/home.component'; +import { FormlyHorizontalWrapper } from './forms/types/horizontal.wrapper'; +import { AppConfig } from './app.config'; +import { PanelWrapperComponent } from './forms/types/group.type'; +import { LogoutComponent } from './authentication/logout/logout.component'; +import { SearchComponent } from '../app/discovery/search/search.component'; +import { AuthConfigService } from './authentication/auth-config.service'; +import { DocumentsComponent } from './documents/documents.component'; +import { AddDocumentComponent } from './documents/add-document/add-document.component'; +import {WebcamModule} from 'ngx-webcam'; +import { ScanDocumentComponent } from './documents/scan-document/scan-document.component'; +import { ScanQrCodeComponent } from './documents/scan-qr-code/scan-qr-code.component'; +import {QuarModule} from '@altack/quar'; +import { BrowseDocumentsComponent } from './documents/browse-documents/browse-documents.component'; + +import { TranslateLoader, TranslateModule, TranslateService } from '@ngx-translate/core'; +import { TranslateHttpLoader } from '@ngx-translate/http-loader'; +import { HttpClient } from '@angular/common/http'; +import { config } from 'process'; +import { ColorPickerModule } from 'ngx-color-picker'; + + +//form validations +export function minItemsValidationMessage(err, field: FormlyFieldConfig) { + return `should NOT have fewer than ${field.templateOptions.minItems} items`; +} + +export function maxItemsValidationMessage(err, field: FormlyFieldConfig) { + return `should NOT have more than ${field.templateOptions.maxItems} items`; +} + +export function minlengthValidationMessage(err, field: FormlyFieldConfig) { + return `should NOT be shorter than ${field.templateOptions.minLength} characters`; +} + +export function maxlengthValidationMessage(err, field: FormlyFieldConfig) { + return `should NOT be longer than ${field.templateOptions.maxLength} characters`; +} + +export function minValidationMessage(err, field: FormlyFieldConfig) { + return `should be >= ${field.templateOptions.min}`; +} + +export function maxValidationMessage(err, field: FormlyFieldConfig) { + return `should be <= ${field.templateOptions.max}`; +} + +export function multipleOfValidationMessage(err, field: FormlyFieldConfig) { + return `should be multiple of ${field.templateOptions.step}`; +} + +export function exclusiveMinimumValidationMessage(err, field: FormlyFieldConfig) { + return `should be > ${field.templateOptions.step}`; +} + +export function exclusiveMaximumValidationMessage(err, field: FormlyFieldConfig) { + return `should be < ${field.templateOptions.step}`; +} + +export function constValidationMessage(err, field: FormlyFieldConfig) { + return `should be equal to constant "${field.templateOptions.const}"`; +} + +function initConfig(config: AppConfig) { + return () => config.load() +} + +import ISO6391 from 'iso-639-1'; +import { PagesComponent } from './pages/pages.component'; +import { ServiceWorkerModule } from '@angular/service-worker'; +import { environment } from '../environments/environment'; + +import {AuthImagePipe} from '../app/layouts/doc-view/doc-view.component'; +import { NgxExtendedPdfViewerModule } from 'ngx-extended-pdf-viewer'; +import { DocDetailViewComponent } from './documents/doc-detail-view/doc-detail-view.component'; +// import { FaqComponent } from './custom-components/faq/faq.component'; +import { SafeHtmlPipe } from './safe-html.pipe'; +import { initTheme } from './theme.config'; +// import { CreateCertificateComponent } from './create-certificate/create-certificate.component'; + +@NgModule({ + declarations: [ + AppComponent, + FormsComponent, + SearchComponent, + ArrayTypeComponent, + ObjectTypeComponent, + MultiSchemaTypeComponent, + NullTypeComponent, + LayoutsComponent, + ModalRouterEditLinkDirective, + ModalRouterAddLinkDirective, + PanelsComponent, EditPanelComponent, AddPanelComponent, TablesComponent, + AutocompleteTypeComponent, + FormlyColorInput, + HeaderComponent, + AttestationComponent, + FileValueAccessor, + FormlyFieldFile, + DocViewComponent, + FormlyFieldNgSelect, + InstallComponent, + HomeComponent, + LogoutComponent, + DocumentsComponent, + AddDocumentComponent, + ScanDocumentComponent, + ScanQrCodeComponent, + BrowseDocumentsComponent, + AuthImagePipe + ], + imports: [ + BrowserModule, + AppRoutingModule, + BrowserAnimationsModule, + HttpClientModule, + FormsModule, + ReactiveFormsModule, + NgbModule, + NgbAccordionModule, + FormlyBootstrapModule, + KeycloakAngularModule, + Bootstrap4FrameworkModule, + AngularMultiSelectModule, + NgSelectModule, + + HttpClientModule, + TranslateModule.forRoot(), + + WebcamModule, + ColorPickerModule, + QuarModule, + NgxExtendedPdfViewerModule, + FormlyModule.forRoot({ + extras: { resetFieldOnHide: true }, + wrappers: [{ name: 'form-field-horizontal', component: FormlyHorizontalWrapper }, + { name: 'panel', component: PanelWrapperComponent }], + validationMessages: [ + { name: 'required', message: '' }, + + ], + types: [ + { name: 'string', extends: 'input' }, + { + name: 'number', + extends: 'input', + defaultOptions: { + templateOptions: { + type: 'number', + }, + }, + }, + { + name: 'integer', + extends: 'input', + defaultOptions: { + templateOptions: { + type: 'number', + }, + }, + }, + { name: 'boolean', extends: 'checkbox' }, + { name: 'enum', extends: 'select' }, + { name: 'null', component: NullTypeComponent, wrappers: ['form-field'] }, + { name: 'array', component: ArrayTypeComponent }, + { name: 'object', component: ObjectTypeComponent }, + { name: 'multischema', component: MultiSchemaTypeComponent }, + { + name: 'autocomplete', + component: AutocompleteTypeComponent + }, + { name: 'file', component: FormlyFieldFile, wrappers: ['form-field'] }, + { name: 'multiselect', component: FormlyFieldNgSelect }, + { name: 'color', component: FormlyColorInput }, + ], + }), + ToastrModule.forRoot({ + positionClass: 'toast-bottom-full-width', + preventDuplicates: true, + }), + NgxPaginationModule, + ServiceWorkerModule.register('ngsw-worker.js', { enabled: environment.production }) + ], + exports: [TranslateModule], + schemas: [CUSTOM_ELEMENTS_SCHEMA], + entryComponents: [], + bootstrap: [AppComponent], + providers: [ + AppConfig, + AuthImagePipe, + { provide: APP_INITIALIZER, useFactory: initConfig, deps: [AppConfig], multi: true }, + { + provide: APP_INITIALIZER, + useFactory: initializeKeycloak, + multi: true, + deps: [KeycloakService, AuthConfigService], + }, + { provide: MAT_FORM_FIELD_DEFAULT_OPTIONS, useValue: { floatLabel: 'always' } }, + { + provide: APP_INITIALIZER, + useFactory: initLang, + deps: [HttpClient, TranslateService], + multi: true + }, + { + provide: APP_INITIALIZER, + useFactory: initTheme, + deps: [HttpClient, TranslateService], + multi: true + }] +}) + + +export class AppModule { + languages; + constructor(translate: TranslateService, authConfig: AuthConfigService) { + + authConfig.getConfig().subscribe((config) => { + this.languages = config.languages; + var installed_languages = []; + + for (let i = 0; i < this.languages.length; i++) { + installed_languages.push({ + "code": this.languages[i], + "name": ISO6391.getNativeName(this.languages[i]) + }); + } + + localStorage.setItem('languages', JSON.stringify(installed_languages)); + translate.addLangs(this.languages); + + if (localStorage.getItem('setLanguage') && this.languages.includes(localStorage.getItem('setLanguage'))) { + translate.use(localStorage.getItem('setLanguage')); + + } else { + const browserLang = translate.getBrowserLang(); + let lang = this.languages.includes(browserLang) ? browserLang : 'en'; + translate.use(lang); + localStorage.setItem('setLanguage', lang); + } + }); + + } +} + diff --git a/src/app/authentication/auth-config.service.ts b/src/app/authentication/auth-config.service.ts new file mode 100644 index 0000000..a603752 --- /dev/null +++ b/src/app/authentication/auth-config.service.ts @@ -0,0 +1,32 @@ +import { HttpClient } from '@angular/common/http'; +import { Injectable } from '@angular/core'; +import { Observable, of } from 'rxjs'; +import { catchError, mergeMap } from 'rxjs/operators'; + +@Injectable({ + providedIn: 'root' +}) +export class AuthConfigService { + private config: any; + + constructor(private httpClient: HttpClient) {} + + public getConfig(): Observable { + return this.httpClient + .get('./assets/config/config.json', { + observe: 'response', + }) + .pipe( + catchError((error) => { + return of(null) + } ), + mergeMap((response) => { + if (response && response.body) { + this.config = response.body; + return of(this.config); + } else { + return of(null); + } + })); + } +} diff --git a/src/app/authentication/login/keycloaklogin.component.css b/src/app/authentication/login/keycloaklogin.component.css new file mode 100644 index 0000000..e69de29 diff --git a/src/app/authentication/login/keycloaklogin.component.html b/src/app/authentication/login/keycloaklogin.component.html new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/src/app/authentication/login/keycloaklogin.component.html @@ -0,0 +1 @@ + diff --git a/src/app/authentication/login/keycloaklogin.component.spec.ts b/src/app/authentication/login/keycloaklogin.component.spec.ts new file mode 100644 index 0000000..af4896a --- /dev/null +++ b/src/app/authentication/login/keycloaklogin.component.spec.ts @@ -0,0 +1,25 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { KeycloakloginComponent } from './keycloaklogin.component'; + +describe('KeycloakloginComponent', () => { + let component: KeycloakloginComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [ KeycloakloginComponent ] + }) + .compileComponents(); + }); + + beforeEach(() => { + fixture = TestBed.createComponent(KeycloakloginComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/src/app/authentication/login/keycloaklogin.component.ts b/src/app/authentication/login/keycloaklogin.component.ts new file mode 100644 index 0000000..4f777ea --- /dev/null +++ b/src/app/authentication/login/keycloaklogin.component.ts @@ -0,0 +1,47 @@ +import { Component, OnInit } from '@angular/core'; +import { KeycloakService } from 'keycloak-angular'; +import { Router } from '@angular/router'; +import { AppConfig } from '../../app.config'; + +@Component({ + selector: 'app-keycloaklogin', + templateUrl: './keycloaklogin.component.html', + styleUrls: ['./keycloaklogin.component.css'] +}) +export class KeycloakloginComponent implements OnInit { + user : any; + entity: string; + profileUrl: string = ''; + constructor( + public keycloakService: KeycloakService, + public router: Router, private config: AppConfig + + ) { } + + ngOnInit(): void { + this.keycloakService.loadUserProfile().then((res)=>{ + console.log(res['attributes'].entity[0]); + + this.entity = res['attributes'].entity[0]; + if(res['attributes'].hasOwnProperty('locale') && res['attributes'].locale.length){ + localStorage.setItem('setLanguage', res['attributes'].locale[0]); + } + }); + this.user = this.keycloakService.getUsername(); + this.keycloakService.getToken().then((token)=>{ + console.log('keyCloak teacher token - ', token); + localStorage.setItem('token', token); + localStorage.setItem('loggedInUser', this.user); + console.log('---------',this.config.getEnv('appType')) + if(this.config.getEnv('appType') && this.config.getEnv('appType') === 'digital_wallet'){ + this.profileUrl = this.entity+'/documents' + }else{ + this.profileUrl = '/profile/'+this.entity; + } + this.router.navigate([this.profileUrl]); + + }); + } + + +} diff --git a/src/app/authentication/logout/logout.component.html b/src/app/authentication/logout/logout.component.html new file mode 100644 index 0000000..f0f88ba --- /dev/null +++ b/src/app/authentication/logout/logout.component.html @@ -0,0 +1,5 @@ +
+
+ Loading... +
+
diff --git a/src/app/authentication/logout/logout.component.scss b/src/app/authentication/logout/logout.component.scss new file mode 100644 index 0000000..e69de29 diff --git a/src/app/authentication/logout/logout.component.spec.ts b/src/app/authentication/logout/logout.component.spec.ts new file mode 100644 index 0000000..2f92d47 --- /dev/null +++ b/src/app/authentication/logout/logout.component.spec.ts @@ -0,0 +1,25 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { LogoutComponent } from './logout.component'; + +describe('LogoutComponent', () => { + let component: LogoutComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [ LogoutComponent ] + }) + .compileComponents(); + }); + + beforeEach(() => { + fixture = TestBed.createComponent(LogoutComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/src/app/authentication/logout/logout.component.ts b/src/app/authentication/logout/logout.component.ts new file mode 100644 index 0000000..29d6b50 --- /dev/null +++ b/src/app/authentication/logout/logout.component.ts @@ -0,0 +1,23 @@ +import { Component, OnInit } from '@angular/core'; +import { Router } from '@angular/router'; +import { KeycloakService } from 'keycloak-angular'; +import { AppConfig } from 'src/app/app.config'; + +@Component({ + selector: 'app-logout', + templateUrl: './logout.component.html', + styleUrls: ['./logout.component.scss'] +}) +export class LogoutComponent implements OnInit { + baseUrl = this.config.getEnv('baseUrl'); + constructor(public keycloakService: KeycloakService,private config: AppConfig, public router: Router) { } + + ngOnInit(): void { + localStorage.clear(); + + this.keycloakService.clearToken(); + this.keycloakService.logout(window.location.origin); + // this.router.navigate(['']) + } + +} diff --git a/src/app/create-certificate/create-certificate.component.html b/src/app/create-certificate/create-certificate.component.html new file mode 100644 index 0000000..17c0f54 --- /dev/null +++ b/src/app/create-certificate/create-certificate.component.html @@ -0,0 +1,61 @@ + + + + + + +
+ + +
+ +
+
+

Choose Template Help You can select exiting template or create your own certificate

+ +
+ +
+ + +
+
+

Template Name

+ +
+ +
+
+
+
+ +
\ No newline at end of file diff --git a/src/app/create-certificate/create-certificate.component.scss b/src/app/create-certificate/create-certificate.component.scss new file mode 100644 index 0000000..6e4a9a4 --- /dev/null +++ b/src/app/create-certificate/create-certificate.component.scss @@ -0,0 +1,18 @@ +textarea { + border: none !important; +} + +.input-field { + height: 48px !important; +border-radius: 4px !important; +border: 1px solid #EFEFEF +} + +.p-0 { + padding: 0 !important; +} + +.div-scroll { + overflow-y: scroll; /* Show vertical scrollbar */ + overflow-x: scroll; /* Show horizontal scrollbar */ + } \ No newline at end of file diff --git a/src/app/create-certificate/create-certificate.component.spec.ts b/src/app/create-certificate/create-certificate.component.spec.ts new file mode 100644 index 0000000..43e7abd --- /dev/null +++ b/src/app/create-certificate/create-certificate.component.spec.ts @@ -0,0 +1,26 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { CreateCertificateComponent } from './create-certificate.component'; +import { TranslateService } from '@ngx-translate/core'; + +describe('CreateCertificateComponent', () => { + let component: CreateCertificateComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [ CreateCertificateComponent ] + }) + .compileComponents(); + }); + + beforeEach(() => { + fixture = TestBed.createComponent(CreateCertificateComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/src/app/create-certificate/create-certificate.component.ts b/src/app/create-certificate/create-certificate.component.ts new file mode 100644 index 0000000..95e91df --- /dev/null +++ b/src/app/create-certificate/create-certificate.component.ts @@ -0,0 +1,17 @@ +import { Component, OnInit, ViewChild } from '@angular/core'; +import { TranslateService } from '@ngx-translate/core'; + +@Component({ + selector: 'app-create-certificate', + templateUrl: './create-certificate.component.html', + styleUrls: ['./create-certificate.component.scss'] +}) +export class CreateCertificateComponent implements OnInit { + @ViewChild("userHtml", { static: false }) userHtml; + + constructor(public translate: TranslateService,) { } + + ngOnInit(): void { + } + +} diff --git a/src/app/custom-components/faq/faq.component.html b/src/app/custom-components/faq/faq.component.html new file mode 100644 index 0000000..305a469 --- /dev/null +++ b/src/app/custom-components/faq/faq.component.html @@ -0,0 +1,172 @@ +
+ +
+
+
+
+

+ Frequently asked questions +

+
+
+
+ + + + The Government’s “E-Locker Initiative” complements the Sri Lanka Unique Digital Identity (SLUDI) program, by allowing citizens to manage authenticated documents that can carry specific personal information about themselves, for them to avail any specific + Government/Private sector services or benefits. + + + + +
    +
  • + Scan & Upload Documents - You can self-attest documents that are available offline and then, scan and upload them on to your E-Locker account. +
  • +
  • + Scan & Upload QR code Of Verifiable Credentials - You can scan verifiable credential documents, by scanning their QR code and and importing them on to your E-Locker account +
  • +
  • + Import documents - You can fetch verifiable credentials from already available issuer systems, into your E-Locker account. +
  • +
+
+
+ + + +
    +
  • + Important Documents Anytime, Anywhere! +
  • +
  • + Authentic Documents, Legally at Par with Originals. +
  • +
  • + Digital Document Exchange with the consent of the citizen. +
  • +
  • + Faster service Delivery- Government Benefits, Employment, Financial Inclusion, Education, Health. +
  • +
+
+
+ + + Signing up for E-Locker is easy - all you need is your mobile. Your mobile number will be authenticated by sending an OTP (one-time password). This will create your E-Locker account. + + + + + + OTP is a random one-time password generated by the E-Locker system and sent to your registered mobile number. The OTP is valid for 2 minutes only. If you enter the OTP after 2 minutes, it will be rendered invalid and you have to request a resend OTP. + + + + + + After a successful login, click on the “Profile” option (in the menu section) which will take you to the Profile Detail page. An “Edit” button will be available on the same page, clicking on which, will allow you to update the details. + + + + + + Currently this feature is not available. + + + + + + “Issued documents” are e-documents issued by various Government agencies, in electronic format, directly from the original data source and the URI (link) of these documents is available in the issued documents section of E-Locker. Whereas + “Uploaded documents” are those documents that are uploaded directly by the E-Locker user and are self attested. + + + + + + + After a successful login, you will be redirected to a My Documents page. On the right top corner, you will see an “Add” button. Clicking this, will take you to the Documents section. Click on “Upload document / Scan document” to upload the documents. + Once complete, click on the “Submit” button to complete the process. + + + + + + The maximum file upload size is 5 MB. The only allowed file extensions are .JPEG, .PNG, .JPG, .PDF. + + + + + + To get the verified SLUDI certificate. Click on browse document section, In “By document” search section. +
    +
  • + Select the “Sri lanka unique identification” option +
  • +
  • + Add your SLUID and click verify +
  • +
  • + Registered mobile number will receive an OTP +
  • +
  • + Submit the OTP and verify the ID number +
  • +
  • + Complete the submit process and your verified SLUID certificate will be available +
  • +
+ Same process can be used by other available issuers to fetch the documents. +
+
+ + + + At present you are only allowed to fetch your SLUDI verifiable credential into your E-Locker account. You will have the ability to fetch your verifiable credentials, from various issuing systems, in the near future. + + + + + + To become an Issuer/Requester of E-Locker, your organization first needs to be registered with us. To know about the process of registration, please contact our customer support team at xxx@xxx.xx . Your request will be forwarded to the on-boarding team + and they’ll get back to you. + + + + + + E-Locker is completely safe and secure to use. We do care about your privacy and take all precautionary measures to ensure your data is protected and uncompromised. We follow following standard practices +
    +
  • + The application communication is secured through SSL +
  • +
  • + Industry standard encryption protocols are followed +
  • +
  • + Controlled data access layer +
  • +
  • + Storage level encryption is enabled +
  • +
+
+
+ +
\ No newline at end of file diff --git a/src/app/custom-components/faq/faq.component.scss b/src/app/custom-components/faq/faq.component.scss new file mode 100644 index 0000000..c627672 --- /dev/null +++ b/src/app/custom-components/faq/faq.component.scss @@ -0,0 +1,14 @@ +ngb-accordion ::ng-deep .card-header { + padding: 0; +} + +ngb-accordion ::ng-deep .card-header button { + width: 100%; + padding: 1.125rem 2rem; + text-decoration: none; + text-align: left; +} + +ngb-accordion ::ng-deep .card-header button:focus { + box-shadow: none; +} \ No newline at end of file diff --git a/src/app/custom-components/faq/faq.component.spec.ts b/src/app/custom-components/faq/faq.component.spec.ts new file mode 100644 index 0000000..bfa0b00 --- /dev/null +++ b/src/app/custom-components/faq/faq.component.spec.ts @@ -0,0 +1,25 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { FaqComponent } from './faq.component'; + +describe('FaqComponent', () => { + let component: FaqComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [ FaqComponent ] + }) + .compileComponents(); + }); + + beforeEach(() => { + fixture = TestBed.createComponent(FaqComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/src/app/custom-components/faq/faq.component.ts b/src/app/custom-components/faq/faq.component.ts new file mode 100644 index 0000000..65feeaf --- /dev/null +++ b/src/app/custom-components/faq/faq.component.ts @@ -0,0 +1,15 @@ +import { Component, OnInit } from '@angular/core'; + +@Component({ + selector: 'app-faq', + templateUrl: './faq.component.html', + styleUrls: ['./faq.component.scss'] +}) +export class FaqComponent implements OnInit { + + constructor() { } + + ngOnInit(): void { + } + +} diff --git a/src/app/discovery/search/search.component.html b/src/app/discovery/search/search.component.html new file mode 100644 index 0000000..3a50902 --- /dev/null +++ b/src/app/discovery/search/search.component.html @@ -0,0 +1,117 @@ + + +
+
+ +
+ + + +
+ + + +
+ + +
+

+
+ + + +
+
+
+
+
+ +
+ + +
+
+
+
+ {{field?.title | translate}} : + {{field?.value}} + + + + + {{field?.value[i].value}} + + + + + {{subField?.value}} + + + + + + ,   + + +
+
+
+
+ + +
+ +
+ + + + + + + + +
+ {{'DATA_NOT_FOUND' | translate}} +
+ + +
+
+
+ {{'LOADING' | translate}} +
+
+
+
+ +
+ + + \ No newline at end of file diff --git a/src/app/discovery/search/search.component.scss b/src/app/discovery/search/search.component.scss new file mode 100644 index 0000000..c3554ab --- /dev/null +++ b/src/app/discovery/search/search.component.scss @@ -0,0 +1,162 @@ +dl{ + display: flex; + flex-wrap: wrap; + flex-direction: column; + height: 4em; +} + +.row { + margin-top: -20px !important; +} + +dt{ + font-weight: 500; +} +dl,dt{ + flex-basis: 30%; + margin-bottom: 0 !important; +} + +.h-100vh{ + height: 100vh; +} +.blue-shade-btn{ + background: #7f6ae245; + padding: 0.6rem; + border-radius: 5px; + margin-bottom: 0.4rem; + font-size: 0.9rem; + width: fit-content; + margin-top: 0.4rem; +} + +.modal.left .modal-dialog, +.modal.right .modal-dialog { + position: fixed; + margin: auto; + width: 100%; + height: 100%; + -webkit-transform: translate3d(0%, 0, 0); + -ms-transform: translate3d(0%, 0, 0); + -o-transform: translate3d(0%, 0, 0); + transform: translate3d(0%, 0, 0); +} + +.modal.left .modal-content, +.modal.right .modal-content { + height: 100%; + overflow-y: auto; +} + +.right-xl-modal{ + &.modal{ + right: 0 !important; + // width: 70% !important; + left: inherit !important; + } + .modal-dialog{ + max-width: 680px !important; + margin: 0 auto !important; + } +} + +.modal.left .modal-body, +.modal.right .modal-body { + padding: 15px 15px 80px; +} + +/*Left*/ +.modal.left.fade .modal-dialog{ + left: -320px; + -webkit-transition: opacity 0.3s linear, left 0.3s ease-out; + -moz-transition: opacity 0.3s linear, left 0.3s ease-out; + -o-transition: opacity 0.3s linear, left 0.3s ease-out; + transition: opacity 0.3s linear, left 0.3s ease-out; +} + +.modal.left.fade.in .modal-dialog{ + left: 0; +} + +/*Right*/ +.modal.right.fade .modal-dialog { + right: -0; + -webkit-transition: opacity 0.3s linear, right 0.3s ease-out; + -moz-transition: opacity 0.3s linear, right 0.3s ease-out; + -o-transition: opacity 0.3s linear, right 0.3s ease-out; + transition: opacity 0.3s linear, right 0.3s ease-out; +} + +.modal.right.fade.in .modal-dialog { + right: 0; +} + +/* ----- MODAL STYLE ----- */ +.modal-content { + border-radius: 0; + border: none; +} + +.modal-header { + border-bottom-color: #EEEEEE; + background-color: #FAFAFA; +} + +/* ----- v CAN BE DELETED v ----- */ +/* body { +background-color: #78909C; +} */ + +.demo { +padding-top: 60px; +padding-bottom: 110px; +} + +.btn-demo { +margin: 15px; +padding: 10px 15px; +border-radius: 0; +font-size: 16px; +background-color: #FFFFFF; +} + +.btn-demo:focus { +outline: 0; +} +#footer { + position: absolute; + bottom: 0px; + width: 100%; +} + +#content, #sidebar { + margin-bottom: 5em; +} + +.demo-footer { +position: fixed; +bottom: 0; +width: 100%; +padding: 15px; +background-color: #212121; +text-align: center; +} + +.demo-footer > a { +text-decoration: none; +font-weight: bold; +font-size: 16px; +color: #fff; +} +.red{ + color: red; +} + +mb-2{ + margin: bottom 2px; +} + +.noToBottom{ + margin-top: 10px; + padding-bottom: 40px; +} diff --git a/src/app/discovery/search/search.component.spec.ts b/src/app/discovery/search/search.component.spec.ts new file mode 100644 index 0000000..597e3f1 --- /dev/null +++ b/src/app/discovery/search/search.component.spec.ts @@ -0,0 +1,26 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { SearchComponent } from './search.component'; + +describe('SearchComponent', () => { + let component: SearchComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [SearchComponent] + }) + .compileComponents(); + }); + + beforeEach(() => { + fixture = TestBed.createComponent(SearchComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); + diff --git a/src/app/discovery/search/search.component.ts b/src/app/discovery/search/search.component.ts new file mode 100644 index 0000000..f3e6b5d --- /dev/null +++ b/src/app/discovery/search/search.component.ts @@ -0,0 +1,376 @@ +import { Component, OnInit } from '@angular/core'; +import { FormGroup } from '@angular/forms'; +import { FormlyFieldConfig, FormlyFormOptions } from '@ngx-formly/core'; +import { SchemaService } from '../../services/data/schema.service'; +import { FormlyJsonschema } from '@ngx-formly/core/json-schema'; +import { GeneralService } from '../../services/general/general.service'; +import { ChangeDetectionStrategy } from '@angular/core'; +import { of as observableOf } from 'rxjs'; +import { TranslateService } from '@ngx-translate/core'; + +@Component({ + selector: 'app-search', + templateUrl: './search.component.html', + styleUrls: ['./search.component.scss'], + changeDetection: ChangeDetectionStrategy.Default + +}) + +export class SearchComponent implements OnInit { + header: string = null; + searchSchemas: any; + filtered = []; + searchString: any; + + fields: FormlyFieldConfig[] = []; + data: any = []; + + form = new FormGroup({}); + model: any = {}; + options: FormlyFormOptions = {}; + isLoading: boolean = true; + searchJson; + cardFields = []; + selectOption = {}; + + activeTabIs: string; + + items = []; + apiUrl: any; + user: any; + searchResult: any; + dropdownList = []; + selectedItems = []; + dropdownSettings = {}; + responseData; + privateFields; + searchFields = { + tabs: [ + { + fields: [ + { + } + ] + } + ] + }; + + page: number = 1; + limit: number; + fieldsTemp = []; + + constructor( + public schemaService: SchemaService, + private formlyJsonschema: FormlyJsonschema, + public generalService: GeneralService, + public translate: TranslateService + ) { + this.dropdownSettings = { + singleSelection: false, + text: this.translate.instant("SELECT_FILTER"), + selectAllText: this.translate.instant("SELECT_ALL"), + unSelectAllText:this.translate.instant("UNSELECT_ALL"), + searchPlaceholderText : this.translate.instant("SEARCH"), + enableSearchFilter: true, + noDataLabel: this.translate.instant("FILTER_NOT_AVAILABLE"), + classes: "myclass custom-class" + }; + } + + + ngOnInit(): void { + + + + this.schemaService.getSearchJSON().subscribe((searchSchemas) => { + this.searchSchemas = searchSchemas; + + let _self = this; + Object.keys(_self.searchSchemas.searches).forEach(function (key) { + _self.searchJson = _self.searchSchemas.searches[key]; + + + Object.keys(_self.searchJson).forEach(function (key1) { + + _self.filtered.push(_self.searchJson[key1]); + + if (_self.searchJson[key1].hasOwnProperty('activeTab') && _self.searchJson[key1].activeTab == 'active') { + _self.activeTabIs = _self.searchJson[key1].tab; + _self.apiUrl = _self.searchJson[key1].api; + } + + }) + }) + + if (this.searchSchemas.header) { + this.header = this.searchSchemas.header; + this.limit = this.searchSchemas.limit; + } + + this.schemaService.getSchemas().subscribe((res) => { + this.responseData = res; + this.showFilter(this.filtered, this.activeTabIs); + + }); + + }); + + } + + + showFilter(filtered, activeTabIs) { + + filtered.forEach((fieldset, index) => { + if (filtered[index].tab == activeTabIs) { + this.data.push({ + fieldGroupClassName: 'row', fieldGroup: [] + }); + + if (filtered[index].hasOwnProperty('privateFields')) { + this.privateFields = (this.responseData.definitions[filtered[index]['privateFields']].hasOwnProperty('privateFields') ? this.responseData.definitions[filtered[index]['privateFields']].privateFields : []); + } + + fieldset.filters.forEach((filter, index1) => { + + if (this.privateFields != [] && !this.privateFields.includes('$.' + filter.propertyPath)) { + + let fieldObj = { + key: filter.key, + type: 'input', + className: 'col-sm-4', + templateOptions: { + label: this.translate.instant(filter.title), + } + } + + + if (filter.type == 'autocomplete') { + fieldObj.type = 'autocomplete'; + fieldObj['templateOptions']['label'] = this.translate.instant(filter.title); + fieldObj['templateOptions']['placeholder'] = this.translate.instant(filter.placeholder); + + + fieldObj['templateOptions']['search$'] = (term) => { + if (term || term != '') { + var formData = { + "filters": {}, + "limit": 20, + "offset": 0 + } + + formData.filters[filter.key] = {}; + formData.filters[filter.key]["contains"] = term; + + this.generalService.postData(filter.api, formData).subscribe(async (res) => { + let items = res; + items = items.filter(x => x[filter.key].toLocaleLowerCase().indexOf(term.toLocaleLowerCase()) > -1); + if (items) { + this.searchResult = items; + return observableOf(this.searchResult); + } + }); + } + + return observableOf(this.searchResult); + + } + } + + this.dropdownList.push({ "id": filter.key, "itemName": this.translate.instant(filter.title), "data": fieldObj }); + + if (filter.default) { + this.data[0].fieldGroup.push(fieldObj); + this.selectedItems.push({ "id": filter.key, "itemName": this.translate.instant(filter.title) }); + } + } + }); + + + this.fields = [this.data[0]]; + + fieldset.results.fields.forEach((fields) => { + if (this.privateFields != [] && !this.privateFields.includes('$.' + fields.property)) { + this.cardFields.push(fields); + } + }); + + } + }); + + + this.searchData(); + } + + searchData() { + this.isLoading = true; + + this.searchString = { + "filters": { + } + } + + let _self = this; + + Object.keys(_self.model).forEach(function (key) { + _self.filtered.forEach((fieldset, index) => { + if (_self.filtered[index].tab == _self.activeTabIs) { + + fieldset.filters.forEach((filter) => { + + if (key == filter.key) { + if (_self.model[key]) { + _self.searchString.filters[filter.propertyPath] = { + "startsWith": _self.model[key] + }; + } + } + }); + } + }); + + }); + + + this.generalService.postData(this.apiUrl, this.searchString).subscribe((res) => { + this.mapFieldsdata(res); + this.isLoading = false; + }, (err) => { + }); + } + + async mapFieldsdata(res) { + this.items = []; + + + await res.forEach((item, index) => { + this.fieldsTemp = []; + + this.cardFields.forEach((key, i) => { + + var property = key.property; + var title = this.translate.instant(key.title); + var propertySplit = property.split("."); + + let fieldValue = []; + + for (let j = 0; j < propertySplit.length; j++) { + let a = propertySplit[j]; + + if (j == 0 && item.hasOwnProperty(a)) { + fieldValue = item[a]; + } else if (fieldValue.hasOwnProperty(a)) { + + fieldValue = fieldValue[a]; + + } else if (fieldValue[0]) { + let arryItem = [] + if (fieldValue.length > 0) { + for (let i = 0; i < fieldValue.length; i++) { + arryItem.push({ 'value': fieldValue[i][a], "status": fieldValue[i][key.attest] }); + } + // if ((!arryItem.some(e => e.value == fieldValue[i][a])) && arryItem[i -1 ]..indexOf("Marcos") !== -1) { + + fieldValue = arryItem; + + } else { + fieldValue = fieldValue[a]; + } + + } else { + fieldValue = []; + } + } + + + this.fieldsTemp.push({ 'title': this.translate.instant(title), "value": fieldValue }); + + }); + + this.items.push({ + 'fields': this.fieldsTemp, + 'data': item + }); + + }); + + } + + submit() { + this.page = 1; + this.searchData(); + } + + + resetModel(index) { + this.model = {}; + this.searchData(); + } + + resetData() { + this.fields = []; + } + + onItemSelect(item: any) { + this.fields = []; + this.data[0].fieldGroup.push(item.data); + this.fields = [this.data[0]]; + } + OnItemDeSelect(item: any) { + this.fields = []; + this.fields = this.data[0].fieldGroup.filter(function (obj) { + return obj.key !== item.id; + }); + this.data[0].fieldGroup = this.fields; + } + + onSelectAll(items: any) { + this.data[0].fieldGroup = []; + for (let i = 0; i < items.length; i++) { + this.data[0].fieldGroup.push(items[i].data); + } + this.fields = [this.data[0]]; + + } + + onDeSelectAll(items: any) { + this.data[0].fieldGroup = []; + this.model = {}; + } + + searchInstituteData(event) { + let apiUrl; + } + + + + onTabChange(event, activeTabIs) { + this.cardFields = []; + this.fields = []; + this.data = []; + this.dropdownList = []; + this.selectedItems = []; + this.items = []; + this.model = {}; + this.page = 1; + this.activeTabIs = activeTabIs; + event.preventDefault() + this.filtered.forEach((fieldset, index) => { + if (this.filtered[index].tab == activeTabIs) { + this.apiUrl = this.filtered[index].api; + } + }); + + this.showFilter(this.filtered, activeTabIs); + } + + showDetails(item) { + this.user = []; + this.user = item; + } + + typeOf(value) { + return typeof value; + } + + +} diff --git a/src/app/documents/add-document/add-document.component.html b/src/app/documents/add-document/add-document.component.html new file mode 100644 index 0000000..6fda591 --- /dev/null +++ b/src/app/documents/add-document/add-document.component.html @@ -0,0 +1,114 @@ + +
+
+ {{certificate}} +
+
+ + + + + + + + +
+
+
+
+ + + +
+ +
+ +
+
+
+
+
+ + +
+
+
+ {{'LOADING'| translate}} +
+
+
+ + +
+ + + + + + diff --git a/src/app/documents/add-document/add-document.component.scss b/src/app/documents/add-document/add-document.component.scss new file mode 100644 index 0000000..e69de29 diff --git a/src/app/documents/add-document/add-document.component.spec.ts b/src/app/documents/add-document/add-document.component.spec.ts new file mode 100644 index 0000000..13ed3f3 --- /dev/null +++ b/src/app/documents/add-document/add-document.component.spec.ts @@ -0,0 +1,25 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { AddDocumentComponent } from './add-document.component'; + +describe('AddDocumentComponent', () => { + let component: AddDocumentComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [ AddDocumentComponent ] + }) + .compileComponents(); + }); + + beforeEach(() => { + fixture = TestBed.createComponent(AddDocumentComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/src/app/documents/add-document/add-document.component.ts b/src/app/documents/add-document/add-document.component.ts new file mode 100644 index 0000000..de86013 --- /dev/null +++ b/src/app/documents/add-document/add-document.component.ts @@ -0,0 +1,369 @@ +import { Component, ElementRef, OnInit, ViewChild } from '@angular/core'; +import { FormGroup } from '@angular/forms'; +import { ActivatedRoute, Router } from '@angular/router'; +import { FormlyFieldConfig, FormlyFormOptions } from '@ngx-formly/core'; +import { FormlyJsonschema } from '@ngx-formly/core/json-schema'; +import { JSONSchema7 } from "json-schema"; +import { WebcamImage, WebcamInitError, WebcamUtil } from 'ngx-webcam'; +import { Observable, Observer, Subject } from 'rxjs'; +import { GeneralService } from '../../services/general/general.service'; +import { interval } from 'rxjs'; +import { ToastMessageService } from 'src/app/services/toast-message/toast-message.service'; + +@Component({ + selector: 'app-add-document', + templateUrl: './add-document.component.html', + styleUrls: ['./add-document.component.scss'] +}) +export class AddDocumentComponent implements OnInit { + header = 'documents' + form2: FormGroup; + model = {}; + + options: FormlyFormOptions; + fields: FormlyFieldConfig[]; + schema: JSONSchema7 = { + "type": "object", + "title": "", + "definitions": {}, + "properties": {}, + "required": [] + }; + schemaloaded = false; + osid: any; + docType; + verify: boolean = true; + verified: boolean = false; + certificate: any; + entity: any; + isScan: boolean = false; + property: { name: { type: string; title: string; }; fileUrl: { type: string; title: string; widget: { formlyConfig: { type: string; }; }; }; }; + width: any = "100"; + imageFile: File; + step = 0; + steps_length = 0; + steps_data = []; + doc_data: any; + schema_property: {}; + loading: boolean = false; + policyName: any; + attestationOSID: any; + mySubscription: any; + constructor(private route: ActivatedRoute,public toastMsg: ToastMessageService, public generalService: GeneralService, private formlyJsonschema: FormlyJsonschema, public router: Router) { } + + public webcamImage: WebcamImage = null; + handleImage(webcamImage: WebcamImage) { + this.webcamImage = webcamImage; + const base64 = this.webcamImage['_imageAsDataUrl']; + // console.log(base64) + this.dataURItoBlob(base64).subscribe((blob: Blob) => { + const imageBlob: Blob = blob; + const imageName: string = this.generateName(); + this.imageFile = new File([imageBlob], imageName, { + type: "image/jpeg" + }); + console.log(this.imageFile) + // this.model['fileUrl'] = imageFile; + }); + } + + dataURItoBlob(dataURI: string): Observable { + return Observable.create((observer: Observer) => { + const byteString: string = window.atob(dataURI.replace(/^data:image\/(png|jpeg|jpg);base64,/, '')); + const arrayBuffer: ArrayBuffer = new ArrayBuffer(byteString.length); + const int8Array: Uint8Array = new Uint8Array(arrayBuffer); + for (let i = 0; i < byteString.length; i++) { + int8Array[i] = byteString.charCodeAt(i); + } + const blob = new Blob([int8Array], { type: "image/jpeg" }); + observer.next(blob); + observer.complete(); + }); + } + + generateName(): string { + const date: number = new Date().valueOf(); + let text: string = ""; + const possibleText: string = + "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"; + for (let i = 0; i < 5; i++) { + text += possibleText.charAt( + Math.floor(Math.random() * possibleText.length) + ); + } + // Replace extension according to your media type like this + return date + "." + text + ".jpeg"; + } + + ngOnInit(): void { + this.route.params.subscribe(params => { + console.log(params); + if (params['type']) { + this.docType = params['type']; + if (this.docType === 'scan') { + this.isScan = true; + } + } + if (params['entity']) { + this.entity = params['entity']; + } + if (params['id']) { + this.osid = params['id']; + this.createDynamicForm(); + } else { + this.createStaticForm(); + } + }) + } + + ngAfterViewInit() { + this.width = this.myIdentifier.nativeElement.offsetWidth; + // var height = this.myIdentifier.nativeElement.offsetHeight; + + console.log('Width:' + this.width); + // console.log('Height: ' + height); + } + + @ViewChild('myIdentifier') + myIdentifier: ElementRef; + + createStaticForm() { + if (this.docType === 'scan') { + var schema: any = { + "name": { "title": this.generalService.translateString('NAME_OF_DOCUMENT'), "type": "string" } + }; + this.schema['properties'] = schema; + this.schema['properties']['name']['widget'] = {}; + this.schema['properties']['name']['widget']['formlyConfig'] = {}; + this.schema['properties']['name']['widget']['formlyConfig']['templateOptions'] = { required: true }; + } else { + var schema: any = { + "name": { "title": this.generalService.translateString('NAME_OF_DOCUMENT'), "type": "string" }, + "fileUrl": { "title": this.generalService.translateString('DOCUMENT'), "type": "string" }, + }; + + this.schema['properties'] = schema; + this.schema['properties']['name']['widget'] = {}; + this.schema['properties']['fileUrl']['widget'] = {}; + this.schema['properties']['name']['widget']['formlyConfig'] = {}; + this.schema['properties']['fileUrl']['widget']['formlyConfig'] = { "type": "file" }; + this.schema['properties']['name']['widget']['formlyConfig']['templateOptions'] = { required: true }; + this.schema['properties']['fileUrl']['widget']['formlyConfig']['templateOptions'] = { required: true }; + } + + this.form2 = new FormGroup({}); + this.options = {}; + this.fields = [this.formlyJsonschema.toFieldConfig(this.schema)]; + this.schemaloaded = true; + this.verified = true; + } + + createDynamicForm() { + var search = { + "entityType": [ + "Issuer" + ], + "filters": { + "osid": { + "eq": this.osid + } + } + } + this.generalService.postData('/Issuer/search', search).subscribe((res) => { + console.log('pub res', res); + this.doc_data = res[0]; + this.policyName = res[0]['policyName'] + if (this.doc_data['steps'] && this.doc_data['steps'].length > 0) { + this.steps_length = this.doc_data['steps'].length; + this.schema_property = JSON.parse(this.doc_data['steps'][this.step]['form']) + } else { + this.schema_property = JSON.parse(this.doc_data['additionalInput']); + } + + this.certificate = this.doc_data['title']; + this.schema.properties = this.schema_property; + this.form2 = new FormGroup({}); + this.options = {}; + this.fields = [this.formlyJsonschema.toFieldConfig(this.schema)]; + this.schemaloaded = true; + console.log(this.schema) + // this.documentTypes = res; + }, (err) => { + // this.toastMsg.error('error', err.error.params.errmsg) + console.log('error', err) + }); + } + + + submit() { + + if (this.steps_length > 0 && this.steps_length != this.step) { + var api = this.doc_data['steps'][this.step]['api']; + this.doc_data['steps'][this.step]['request'] = this.model + this.generalService.postData(api, this.model).subscribe((res) => { + console.log('api res', res); + this.doc_data['steps'][this.step]['response'] = res; + + this.step++; + console.log(this.steps_length, this.step) + if (this.steps_length == this.step) { + this.schemaloaded = false; + this.schema_property = JSON.parse(this.doc_data['additionalInput']) + for (var [key, value] of Object.entries(this.schema_property)) { + console.log(key, value); + if (value["value"]) { + var datavalue = this.getValue(value["value"], this.doc_data); + console.log("datavalue", datavalue) + this.schema_property[key]["value"] = datavalue; + this.schema_property[key]['widget'] = { + "formlyConfig": { + "defaultValue": datavalue, + "templateOptions": { + required: true, + disabled: true + }, + "expressionProperties": { + }, + "validation": {}, + "modelOptions": {} + } + } + if (this.schema_property[key]["hidden"]) { + this.schema_property[key]['widget']['type'] = 'input' + this.schema_property[key]['widget']['formlyConfig']['templateOptions']['type'] = 'hidden' ; + } + } + + }; + this.schema.properties = this.schema_property; + this.form2 = new FormGroup({}); + this.options = {}; + this.fields = [this.formlyJsonschema.toFieldConfig(this.schema)]; + console.log("schema", this.schema_property) + this.schemaloaded = true; + this.loading = false; + } + }); + + } else { + if (!this.osid) { + var formData = new FormData(); + var file; + if (this.docType === 'scan') { + file = this.imageFile; + formData.append("files", file); + } else if (this.model['fileUrl'] && this.model['name']) { + + this.loading = true; + file = this.model['fileUrl']; + formData.append("files", file[0]); + + this.generalService.getData(this.entity).subscribe((res) => { + var url = [this.entity, res[0]['osid'], 'attestation', 'documents'] + this.generalService.postData(url.join('/'), formData).subscribe((res2) => { + this.model['fileUrl'] = res2['documentLocations']; + var attest = { + "name": "attestation-SELF", + "entityName": "User", + "entityId": res[0]['osid'], + "additionalInput": this.model + } + console.log(attest); + this.postData('send', attest); + }) + }) + } + } + else { + this.generalService.getData(this.entity).subscribe((res) => { + this.model['title'] = this.certificate; + var attest = { + "name": this.policyName, + "entityName": "User", + "entityId": res[0]['osid'], + "additionalInput": this.model + } + console.log(attest); + this.postData('send', attest); + }); + } + } + + } + + getValue(value, steps) { + var data = value.split('.'); + var result; + data.forEach(element => { + var num = this.isNumeric(element) + if (num) { + try { + element = parseInt(element) + } + catch (err) { + element = element + } + + } + steps = steps[element] + }); + + return steps; + } + + isNumeric(_input) { + return /\d/.test(_input); + } + + + postData(url, data) { + if(this.doc_data && this.doc_data['logoUrl']){ + data['logoUrl'] = this.doc_data['logoUrl'] + } + this.generalService.postData(url, data).subscribe((res) => { + console.log('post res', res); + this.attestationOSID = res.result.attestationOSID; + // interval(5000).subscribe((x =>{ + // this.getPublishedData() + // }, 5000)); + + this.mySubscription=interval(5000).subscribe(x => { + console.log("xxx",x) + if(x==12){ + this.router.navigate([this.entity, 'documents']) + this.toastMsg.error('error', "Taking more time than usual to fetch document from issuer, something went wrong, please try again") + this.mySubscription.unsubscribe() + } + this.getPublishedData() + }); + // this.router.navigate([this.entity, 'documents']) + // this.documentTypes = res; + }, (err) => { + this.router.navigate([this.entity, 'documents']) + + // this.toastMsg.error('error', err.error.params.errmsg) + console.log('error', err) + }); + } + + getPublishedData(){ + this.generalService.getData(this.entity).subscribe((res) => { + console.log('res', res) + var document = res[0][this.policyName].filter(doc => { + return doc.osid === this.attestationOSID + }) + console.log("document", document); + if(document[0]._osState == "PUBLISHED"){ + this.mySubscription.unsubscribe() + this.router.navigate([this.entity, 'documents']) + } + }); + } + + verifyFn() { + this.verified = true; + this.verify = false; + // this.router.navigate(['documents']) + } + +} diff --git a/src/app/documents/browse-documents/browse-documents.component.html b/src/app/documents/browse-documents/browse-documents.component.html new file mode 100644 index 0000000..48b7b31 --- /dev/null +++ b/src/app/documents/browse-documents/browse-documents.component.html @@ -0,0 +1,49 @@ +
+
{{'BROWSE_ISSUED_DOCUMENTS'|translate}}
+

{{'SELECT_AND_DOWNLOAD_ISSUED_DOCUMENTS'|translate}}

+ +
+ +
...
+
...
+
+
\ No newline at end of file diff --git a/src/app/documents/browse-documents/browse-documents.component.scss b/src/app/documents/browse-documents/browse-documents.component.scss new file mode 100644 index 0000000..1eeb9a9 --- /dev/null +++ b/src/app/documents/browse-documents/browse-documents.component.scss @@ -0,0 +1,41 @@ +.search-area { + .input-append { + position: relative; + .fa-search { + position: absolute; + right: 12px; + top: 15px; + // color: var(--gray2) !important; + } + input { + border: 1px solid #EFEFEF; + box-sizing: border-box; + border-radius: 4px; + padding: 11px 35px 11px 15px; + } + } +} + +.card { + .card-body { + display: flex; + } + .card-image { + border: 1px solid #ddd; + height: 50px; + border-radius: 50%; + width: 50px; + text-align: center; + overflow: hidden; + img { + object-fit: cover; + // padding: 8px; + height: 45px; + border-radius: 100%; + } + } + .card-intro-info { + width: calc(100% - 45px); + padding-right: 5px; + } +} diff --git a/src/app/documents/browse-documents/browse-documents.component.spec.ts b/src/app/documents/browse-documents/browse-documents.component.spec.ts new file mode 100644 index 0000000..7b8e6a9 --- /dev/null +++ b/src/app/documents/browse-documents/browse-documents.component.spec.ts @@ -0,0 +1,25 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { BrowseDocumentsComponent } from './browse-documents.component'; + +describe('BrowseDocumentsComponent', () => { + let component: BrowseDocumentsComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [ BrowseDocumentsComponent ] + }) + .compileComponents(); + }); + + beforeEach(() => { + fixture = TestBed.createComponent(BrowseDocumentsComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/src/app/documents/browse-documents/browse-documents.component.ts b/src/app/documents/browse-documents/browse-documents.component.ts new file mode 100644 index 0000000..7205fc8 --- /dev/null +++ b/src/app/documents/browse-documents/browse-documents.component.ts @@ -0,0 +1,29 @@ +import { Component, OnInit } from '@angular/core'; +import { GeneralService } from 'src/app/services/general/general.service'; + +@Component({ + selector: 'app-browse-documents', + templateUrl: './browse-documents.component.html', + styleUrls: ['./browse-documents.component.scss'] +}) +export class BrowseDocumentsComponent implements OnInit { + documentTypes: any; + constructor(public generalService: GeneralService) { } + + ngOnInit(): void { + var search = { + "entityType": [ + "Issuer" + ], + "filters": {} + } + this.generalService.postData('/Issuer/search', search).subscribe((res) => { + console.log('pub res',res); + this.documentTypes = res; + }, (err) => { + // this.toastMsg.error('error', err.error.params.errmsg) + console.log('error', err) + }); + } + +} diff --git a/src/app/documents/doc-detail-view/doc-detail-view.component.html b/src/app/documents/doc-detail-view/doc-detail-view.component.html new file mode 100644 index 0000000..4b789ab --- /dev/null +++ b/src/app/documents/doc-detail-view/doc-detail-view.component.html @@ -0,0 +1 @@ +

doc-detail-view works!

diff --git a/src/app/documents/doc-detail-view/doc-detail-view.component.scss b/src/app/documents/doc-detail-view/doc-detail-view.component.scss new file mode 100644 index 0000000..e69de29 diff --git a/src/app/documents/doc-detail-view/doc-detail-view.component.spec.ts b/src/app/documents/doc-detail-view/doc-detail-view.component.spec.ts new file mode 100644 index 0000000..5f24091 --- /dev/null +++ b/src/app/documents/doc-detail-view/doc-detail-view.component.spec.ts @@ -0,0 +1,25 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { DocDetailViewComponent } from './doc-detail-view.component'; + +describe('DocDetailViewComponent', () => { + let component: DocDetailViewComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [ DocDetailViewComponent ] + }) + .compileComponents(); + }); + + beforeEach(() => { + fixture = TestBed.createComponent(DocDetailViewComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/src/app/documents/doc-detail-view/doc-detail-view.component.ts b/src/app/documents/doc-detail-view/doc-detail-view.component.ts new file mode 100644 index 0000000..afbe229 --- /dev/null +++ b/src/app/documents/doc-detail-view/doc-detail-view.component.ts @@ -0,0 +1,15 @@ +import { Component, OnInit } from '@angular/core'; + +@Component({ + selector: 'app-doc-detail-view', + templateUrl: './doc-detail-view.component.html', + styleUrls: ['./doc-detail-view.component.scss'] +}) +export class DocDetailViewComponent implements OnInit { + + constructor() { } + + ngOnInit(): void { + } + +} diff --git a/src/app/documents/documents.component.html b/src/app/documents/documents.component.html new file mode 100644 index 0000000..3c774a2 --- /dev/null +++ b/src/app/documents/documents.component.html @@ -0,0 +1,514 @@ + +
+ +
+
+
+ {{'LOADING'|translate}} +
+
+
+
+ +
+
+ +
+ {{'GET_STARTED'|translate}} +
+

{{'YOU_CAN_UPLOAD_YOUR_DOCUMENTS_AND_TAG_IT_FOR_EASY_ACCESS'|translate}}

+ + + +
+
+ + + + + + +
+
+
+
+
+ +
+
+
{{'MY_DOCUMENTS'|translate}}
+
+
+ + +
+ + +

{{'BROWSE_ISSUED_DOCUMENTS'|translate}}

+ +
+ +
...
+
...
+
+
+ + + + + + + + +
+
+ + + \ No newline at end of file diff --git a/src/app/documents/documents.component.scss b/src/app/documents/documents.component.scss new file mode 100644 index 0000000..d3027aa --- /dev/null +++ b/src/app/documents/documents.component.scss @@ -0,0 +1,98 @@ +.search-area { + .input-append { + position: relative; + .fa-search { + position: absolute; + right: 12px; + top: 15px; + color: var(--secondaryTextColor) !important; + } + input { + border: 1px solid #EFEFEF; + box-sizing: border-box; + border-radius: 4px; + padding: 11px 35px 11px 15px; + } + } +} + +.dash-card { + // max-width: 300px; + display: inline-grid; + position: relative; + flex-direction: column; + min-width: 0; + word-wrap: break-word; + background-color: #fff; + background-clip: border-box; + border: 1px solid rgba(0, 0, 0, 0.125); + border-radius: 0.5rem; + margin: 3px; +} + +.border-trans { + border-color: transparent; +} + +// .card-body>div { +// padding: 5px; +// } +.modal-dialog { + top: calc(100% - 300px); +} + +.modal.show .modal-dialog { + margin: -15px -2px 0px -2px; +} + +.animate-bottom { + position: relative; + animation: animatebottom 0.4 s; +} + +@keyframes animatebottom { + from { + bottom: -300 px; + opacity: 0; + } + to { + bottom: 0; + opacity: 1; + } +} + +.card { + .card-body { + display: flex; + } + .card-image { + border: 1px solid #ddd; + height: 50px; + border-radius: 50%; + width: 50px; + text-align: center; + overflow: hidden; + img { + object-fit: cover; + // padding: 8px; + height: 45px; + border-radius: 100%; + } + } + .card-intro-info { + width: calc(100% - 45px); + padding-right: 5px; + } +} + +.add-documentList { + li { + a { + color: var(--secondaryColor); + } + } + .icon-color { + color: var(--secondaryColor); + margin-top: 5px; + } +} \ No newline at end of file diff --git a/src/app/documents/documents.component.spec.ts b/src/app/documents/documents.component.spec.ts new file mode 100644 index 0000000..e7bf475 --- /dev/null +++ b/src/app/documents/documents.component.spec.ts @@ -0,0 +1,25 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { DocumentsComponent } from './documents.component'; + +describe('DocumentsComponent', () => { + let component: DocumentsComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [ DocumentsComponent ] + }) + .compileComponents(); + }); + + beforeEach(() => { + fixture = TestBed.createComponent(DocumentsComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/src/app/documents/documents.component.ts b/src/app/documents/documents.component.ts new file mode 100644 index 0000000..b278580 --- /dev/null +++ b/src/app/documents/documents.component.ts @@ -0,0 +1,128 @@ +import { Component, OnInit } from '@angular/core'; +import { ActivatedRoute } from '@angular/router'; +import { GeneralService } from '../services/general/general.service'; + +@Component({ + selector: 'app-documents', + templateUrl: './documents.component.html', + styleUrls: ['./documents.component.scss'] +}) +export class DocumentsComponent implements OnInit { + header = 'documents' + documentTypes: any; + docs: any = []; + hasDocs: boolean = false; + getStarted: boolean = false; + entity; + loader: boolean = true; + documents: any = []; + excludedFields: any = ['osid','id', 'type','otp','transactionId']; + constructor(private route: ActivatedRoute, public generalService: GeneralService) { + + } + + ngOnInit(): void { + this.route.params.subscribe(params => { + console.log(params); + if (params['entity'] != undefined) { + this.entity = params['entity']; + } + }); + var search = { + "entityType": [ + "Issuer" + ], + "filters": {} + } + this.generalService.postData('/Issuer/search', search).subscribe((res) => { + console.log('pub res', res); + this.documentTypes = res; + }, (err) => { + // this.toastMsg.error('error', err.error.params.errmsg) + console.log('error', err) + }); + this.generalService.getData(this.entity).subscribe((res) => { + console.log('res', res) + if (res[0]['attestation-MOSIP'] && res[0]['attestation-MOSIP'].length > 0) { + res[0]['attestation-MOSIP'].forEach(doc => { + if(doc._osState == "PUBLISHED"){ + this.docs.push(doc) + this.hasDocs = true; + } + + }); + + + } + if (res[0]['attestation-SELF'] && res[0]['attestation-SELF'].length > 0) { + res[0]['attestation-SELF'].forEach(doc => { + this.docs.push(doc); + this.hasDocs = true; + }); + + } + + if (res[0]['attestation-DIVOC'] && res[0]['attestation-DIVOC'].length > 0) { + res[0]['attestation-DIVOC'].forEach(doc => { + this.docs.push(doc); + this.hasDocs = true; + }); + + } + + if (!res[0]['attestation-SELF'] && !res[0]['attestation-MOSIP'] && res[0]['attestation-DIVOC']) { + this.getStarted = true; + } + + this.setDocument(); + console.log("this.docs", this.documents) + this.loader = false; + }); + + + + } + + setDocument() { + this.docs.forEach(element => { + var property = []; + // console.log("docs",this.docs) + if (element.name == 'attestation-DIVOC') { + element['additionalInput'] = JSON.parse(element['additionalInput'])['signedCredentials']['credentialSubject']; + console.log("dfd", element['additionalInput']) + } + for (const [key, value] of Object.entries(element['additionalInput'])) { + var tempObject = {} + if (typeof value != 'object') { + if (!this.excludedFields.includes(key)) { + tempObject['key'] = key; + tempObject['value'] = value; + tempObject['type'] = element['name']; + tempObject['osid'] = element['osid']; + if(element['logoUrl']){ + tempObject['logoUrl'] = element['logoUrl'] + } + property.push(tempObject); + } + } else { + if (!this.excludedFields.includes(key)) { + tempObject['key'] = key; + tempObject['value'] = value[0]; + tempObject['type'] = element['name']; + tempObject['osid'] = element['osid']; + if(element['logoUrl']){ + tempObject['logoUrl'] = element['logoUrl'] + } + property.push(tempObject); + } + } + } + + this.documents.push(property); + }); + } + + addDoc() { + this.hasDocs = false; + } +} diff --git a/src/app/documents/scan-document/scan-document.component.html b/src/app/documents/scan-document/scan-document.component.html new file mode 100644 index 0000000..9dfc662 --- /dev/null +++ b/src/app/documents/scan-document/scan-document.component.html @@ -0,0 +1,18 @@ +
+
+ +
+
+ + +
+ + +
+
+

{{'MESSAGES'|translate}}

+
    +
  • {{error | json}}
  • +
\ No newline at end of file diff --git a/src/app/documents/scan-document/scan-document.component.scss b/src/app/documents/scan-document/scan-document.component.scss new file mode 100644 index 0000000..9426771 --- /dev/null +++ b/src/app/documents/scan-document/scan-document.component.scss @@ -0,0 +1,11 @@ + +.snapshot{ + text-align: center; + img{ + max-width: 800px; + max-height: 800px; + } +} +ul.links{ + padding-bottom: 20px; +} \ No newline at end of file diff --git a/src/app/documents/scan-document/scan-document.component.spec.ts b/src/app/documents/scan-document/scan-document.component.spec.ts new file mode 100644 index 0000000..623a90c --- /dev/null +++ b/src/app/documents/scan-document/scan-document.component.spec.ts @@ -0,0 +1,25 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { ScanDocumentComponent } from './scan-document.component'; + +describe('ScanDocumentComponent', () => { + let component: ScanDocumentComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [ ScanDocumentComponent ] + }) + .compileComponents(); + }); + + beforeEach(() => { + fixture = TestBed.createComponent(ScanDocumentComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/src/app/documents/scan-document/scan-document.component.ts b/src/app/documents/scan-document/scan-document.component.ts new file mode 100644 index 0000000..03a4d0b --- /dev/null +++ b/src/app/documents/scan-document/scan-document.component.ts @@ -0,0 +1,65 @@ +import { Component, OnInit, Output, EventEmitter, Input } from '@angular/core'; +import { Subject } from 'rxjs'; +import { Observable } from 'rxjs'; +import { WebcamImage, WebcamInitError, WebcamUtil } from 'ngx-webcam'; + +@Component({ + selector: 'app-scan-document', + templateUrl: './scan-document.component.html', + styleUrls: ['./scan-document.component.scss'] +}) +export class ScanDocumentComponent implements OnInit { + @Input() width = ''; + @Output() + public pictureTaken = new EventEmitter(); + // toggle webcam on/off + public showWebcam = true; + public allowCameraSwitch = true; + public multipleWebcamsAvailable = false; + public deviceId: string; + public videoOptions: MediaTrackConstraints = { + // width: {ideal: 1024}, + // height: {ideal: 576} + }; + public errors: WebcamInitError[] = []; + // webcam snapshot trigger + private trigger: Subject = new Subject(); + // switch to next / previous / specific webcam; true/false: forward/backwards, string: deviceId + private nextWebcam: Subject = new Subject(); + public ngOnInit(): void { + WebcamUtil.getAvailableVideoInputs() + .then((mediaDevices: MediaDeviceInfo[]) => { + this.multipleWebcamsAvailable = mediaDevices && mediaDevices.length > 1; + }); + } + public triggerSnapshot(): void { + this.trigger.next(); + } + public toggleWebcam(): void { + this.showWebcam = !this.showWebcam; + } + public handleInitError(error: WebcamInitError): void { + this.errors.push(error); + } + public showNextWebcam(directionOrDeviceId: boolean | string): void { + // true => move forward through devices + // false => move backwards through devices + // string => move to device with given deviceId + this.nextWebcam.next(directionOrDeviceId); + } + public handleImage(webcamImage: WebcamImage): void { + console.info('received webcam image', webcamImage); + this.pictureTaken.emit(webcamImage); + this.showWebcam = !this.showWebcam; + } + public cameraWasSwitched(deviceId: string): void { + console.log('active device: ' + deviceId); + this.deviceId = deviceId; + } + public get triggerObservable(): Observable { + return this.trigger.asObservable(); + } + public get nextWebcamObservable(): Observable { + return this.nextWebcam.asObservable(); + } +} diff --git a/src/app/documents/scan-qr-code/scan-qr-code.component.html b/src/app/documents/scan-qr-code/scan-qr-code.component.html new file mode 100644 index 0000000..88f0a94 --- /dev/null +++ b/src/app/documents/scan-qr-code/scan-qr-code.component.html @@ -0,0 +1,9 @@ +
{{'SCAN_THE_QR_CODE'|translate}}
+ +
+
+
+ {{'LOADING'|translate}} +
+
+
\ No newline at end of file diff --git a/src/app/documents/scan-qr-code/scan-qr-code.component.scss b/src/app/documents/scan-qr-code/scan-qr-code.component.scss new file mode 100644 index 0000000..76ab6d4 --- /dev/null +++ b/src/app/documents/scan-qr-code/scan-qr-code.component.scss @@ -0,0 +1,4 @@ +.scanner{ + text-align:-webkit-center; + margin-top:50%; +} diff --git a/src/app/documents/scan-qr-code/scan-qr-code.component.spec.ts b/src/app/documents/scan-qr-code/scan-qr-code.component.spec.ts new file mode 100644 index 0000000..97de633 --- /dev/null +++ b/src/app/documents/scan-qr-code/scan-qr-code.component.spec.ts @@ -0,0 +1,25 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { ScanQrCodeComponent } from './scan-qr-code.component'; + +describe('ScanQrCodeComponent', () => { + let component: ScanQrCodeComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [ ScanQrCodeComponent ] + }) + .compileComponents(); + }); + + beforeEach(() => { + fixture = TestBed.createComponent(ScanQrCodeComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/src/app/documents/scan-qr-code/scan-qr-code.component.ts b/src/app/documents/scan-qr-code/scan-qr-code.component.ts new file mode 100644 index 0000000..b2005ca --- /dev/null +++ b/src/app/documents/scan-qr-code/scan-qr-code.component.ts @@ -0,0 +1,93 @@ +import { Component, OnInit } from '@angular/core'; +import { ActivatedRoute, Router } from '@angular/router'; +import * as JSZip from 'jszip'; +import { GeneralService } from 'src/app/services/general/general.service'; + +@Component({ + selector: 'app-scan-qr-code', + templateUrl: './scan-qr-code.component.html', + styleUrls: ['./scan-qr-code.component.scss'] +}) +export class ScanQrCodeComponent implements OnInit { + loader: boolean = false; + notValid: boolean = false; + qrString; + entity: any; + model; + constructor(public generalService: GeneralService, private route: ActivatedRoute,public router: Router) { } + + ngOnInit(): void { + this.route.params.subscribe(params => { + console.log(params); + + if (params['entity']) { + this.entity = params['entity']; + } + }) + } + + public scanSuccessHandler($event: any) { + // this.getData($event) + this.loader = true; + this.qrString = $event; + // console.log($event); + const CERTIFICATE_FILE = "certificate.json"; + const zip = new JSZip(); + zip.loadAsync($event).then((contents) => { + return contents.files[CERTIFICATE_FILE].async('text') + }).then(contents => { + // console.log('con', contents) + // this.loader = true; + var signedData = JSON.parse(contents) + console.log('-----s',signedData) + var context = {} + context['signedCredentials'] = signedData + this.model = JSON.stringify(context); + this.generalService.getData(this.entity).subscribe((res) => { + console.log('res', res) + var attest = { + "name": "attestation-DIVOC", + "entityName": "User", + "entityId": res[0]['osid'], + "additionalInput": this.model + } + console.log(attest); + this.postData('send', attest); + }); + + // fetch("https://demo-education-registry.xiv.in/skills/api/v1/verify", requestOptions) + // .then(response => response.json()) + // .then(result => { + // console.log('res', { "signedCredentials": { result } }) + // if (result.verified) { + // this.loader = false; + // } + // else { + // this.loader = false; + // // this.scannerEnabled = false; + // this.notValid = true; + // } + // }) + // .catch(error => console.log('error', error)); + }).catch(err => { + console.log('err', err) + // this.loader = false; + // this.scannerEnabled = false; + // this.notValid = true; + // this.enableScanner() + } + ); + } + + postData(url, data) { + this.generalService.postData(url, data).subscribe((res) => { + console.log('pub res', res); + this.router.navigate([this.entity, 'documents']) + // this.documentTypes = res; + }, (err) => { + // this.toastMsg.error('error', err.error.params.errmsg) + console.log('error', err) + }); + } + +} diff --git a/src/app/forms/forms.component.html b/src/app/forms/forms.component.html new file mode 100644 index 0000000..4f5d0c9 --- /dev/null +++ b/src/app/forms/forms.component.html @@ -0,0 +1,74 @@ + + +
+
+

{{headingTitle}}

+
+
+
+
+ + +
+
+ +
+
+
+
+ + +
+ +
+ + + +
+
+
+ {{'LOADING'| translate}}| translate}}... +
+
+
+ + diff --git a/src/app/forms/forms.component.scss b/src/app/forms/forms.component.scss new file mode 100644 index 0000000..ff7b838 --- /dev/null +++ b/src/app/forms/forms.component.scss @@ -0,0 +1,107 @@ +.upload-wrapper { + padding-bottom: 1.25em; + .upload-container { + display: flex; + flex-direction: row; + + .helper-text { + display: flex; + justify-content: left; + align-items: left; + .absolute-div { + display: flex; + justify-content: left; + align-items: left; + position: absolute; + right: 3%; + left: 3%; + mat-icon { + color: #3f51c2; + &:hover { + cursor: pointer; + } + } + div { + color: #3f51c2; + &:hover { + cursor: pointer; + } + } + } + } + .mask { + justify-content: center; + align-items: stretch; + flex: 1; + border-radius: 5px; + padding: 0%; + width: 90%; + height: 72%; + } + &:hover { + .mask { + background-color: #3f51c2; + opacity: 0.2; + cursor: pointer; + } + } + } + .centered { + position: absolute; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); + } + .file-container { + display: flex; + align-items: center; + flex-wrap: wrap; + align-content: space-between; + justify-content: flex-start; + padding: 10px; + margin-top: 8px; + margin-bottom: 8px; + .file { + position: relative; + padding: 5px; + img { + width: 105px; + height: 105px; + display: block; + border-radius: 5px; + object-fit: cover; + } + span { + display: none; + z-index: 1; + left: 10px; + top: 10px; + color: #3f51c2; + &:hover { + cursor: pointer; + } + } + &:hover { + span { + display: inherit; + cursor: pointer; + } + } + } + } + .underline { + border: #3f51c2 solid 1px; + } + .underline-red { + color: red; + } + } + + .card .card-body { + display: inline !important; +} + +.mt-120{ + margin-top: 120px; +} + diff --git a/src/app/forms/forms.component.spec.ts b/src/app/forms/forms.component.spec.ts new file mode 100644 index 0000000..1a278db --- /dev/null +++ b/src/app/forms/forms.component.spec.ts @@ -0,0 +1,25 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { FormsComponent } from './forms.component'; + +describe('FormsComponent', () => { + let component: FormsComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [FormsComponent] + }) + .compileComponents(); + }); + + beforeEach(() => { + fixture = TestBed.createComponent(FormsComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/src/app/forms/forms.component.ts b/src/app/forms/forms.component.ts new file mode 100644 index 0000000..1f6b238 --- /dev/null +++ b/src/app/forms/forms.component.ts @@ -0,0 +1,1338 @@ +import { Component, OnInit, Input } from '@angular/core'; +import { ActivatedRoute, Router } from '@angular/router'; +import { SchemaService } from '../services/data/schema.service'; +import { FormControl, FormGroup } from '@angular/forms'; +import { FormlyFormOptions, FormlyFieldConfig } from '@ngx-formly/core'; +import { FormlyJsonschema } from '@ngx-formly/core/json-schema'; +import { JSONSchema7 } from "json-schema"; +import { GeneralService } from '../services/general/general.service'; +import { Location } from '@angular/common' +import { of } from 'rxjs'; +import { ToastMessageService } from '../services/toast-message/toast-message.service'; +import { of as observableOf } from 'rxjs'; +import { TranslateService } from '@ngx-translate/core'; +import { throwError } from 'rxjs'; + +@Component({ + selector: 'app-forms', + templateUrl: './forms.component.html', + styleUrls: ['./forms.component.scss'] +}) + + +export class FormsComponent implements OnInit { + @Input() form; + @Input() modal; + @Input() identifier; + res: any; + formSchema; + responseData; + schemaloaded = false; + schema: JSONSchema7 = { + "type": "object", + "title": "", + "definitions": {}, + "properties": {} + }; + definations = {}; + property = {}; + ordering; + required = []; + entityId: string; + form2: FormGroup; + model = {}; + options: FormlyFormOptions; + fields: FormlyFieldConfig[]; + customFields = []; + header = null; +exLength : number = 0 + type: string; + apiUrl: string; + redirectTo: any; + add: boolean; + dependencies: any; + privateFields = []; + internalFields = []; + privacyCheck: boolean = false; + globalPrivacy; + searchResult: any[]; + states: any[] = []; + fileFields: any[] = []; + propertyName: string; + notes: any; + langKey: string; + headingTitle; + enumVal; + titleVal + isSignupForm: boolean = false; + entityUrl: any; + propertyId: any; + entityName: string; + sorder: any; + isSubmitForm: boolean = false; + constructor(private route: ActivatedRoute, + public translate: TranslateService, + public toastMsg: ToastMessageService, public router: Router, public schemaService: SchemaService, private formlyJsonschema: FormlyJsonschema, public generalService: GeneralService, private location: Location) { } + + ngOnInit(): void { + this.route.params.subscribe(params => { + this.add = this.router.url.includes('add'); + + if (params['form'] != undefined) { + this.form = params['form'].split('/', 1)[0]; + this.identifier = params['form'].split('/', 2)[1]; + } + + if (params['id'] != undefined) { + this.identifier = params['id'] + } + if (params['modal'] != undefined) { + this.modal = params['modal'] + } + + }); + + this.entityName = localStorage.getItem('entity'); + + this.schemaService.getFormJSON().subscribe((FormSchemas) => { + var filtered = FormSchemas.forms.filter(obj => { + return Object.keys(obj)[0] === this.form + }) + this.formSchema = filtered[0][this.form] + + if (this.formSchema.api) { + this.apiUrl = this.formSchema.api; + this.entityUrl = this.formSchema.api; + } + + if (this.formSchema.header) { + this.header = this.formSchema.header + } + + if (this.formSchema.isSignupForm) { + this.isSignupForm = this.formSchema.isSignupForm; + } + + if (this.formSchema.title) { + this.headingTitle = this.translate.instant(this.formSchema.title); + } + + if (this.formSchema.redirectTo) { + this.redirectTo = this.formSchema.redirectTo; + } + + if (this.formSchema.type) { + this.type = this.formSchema.type; + } + + if (this.formSchema.langKey) { + this.langKey = this.formSchema.langKey; + } + + if (this.type != 'entity') { + this.propertyName = this.type.split(":")[1]; + this.propertyId = this.identifier; + this.getEntityData(this.apiUrl); + } + + this.schemaService.getSchemas().subscribe((res) => { + this.responseData = res; + this.formSchema.fieldsets.forEach(fieldset => { + + if (fieldset.hasOwnProperty('privacyConfig')) { + this.privacyCheck = true; + this.privateFields = (this.responseData.definitions[fieldset.privacyConfig].hasOwnProperty('privateFields') ? this.responseData.definitions[fieldset.privacyConfig].privateFields : []); + this.internalFields = (this.responseData.definitions[fieldset.privacyConfig].hasOwnProperty('internalFields') ? this.responseData.definitions[fieldset.privacyConfig].internalFields : []); + } + this.getData(); + + this.definations[fieldset.definition] = {} + this.definations[fieldset.definition]['type'] = "object"; + if (fieldset.title) { + this.definations[fieldset.definition]['title'] = this.generalService.translateString(this.langKey + '.' + fieldset.title); + } + + if (fieldset.required && fieldset.required.length > 0) { + this.definations[fieldset.definition]['required'] = fieldset.required; + } + + if (fieldset.dependencies) { + + let _self = this; + Object.keys(fieldset.dependencies).forEach(function (key) { + let above13 = fieldset.dependencies[key]; + if (typeof (above13) === 'object') { + Object.keys(above13).forEach(function (key1) { + let oneOf = above13[key1]; + + if (oneOf.length) { + for (let i = 0; i < oneOf.length; i++) { + + if (oneOf[i].hasOwnProperty('properties')) { + + Object.keys(oneOf[i].properties).forEach(function (key2) { + let pro = oneOf[i].properties[key2]; + + if (pro.hasOwnProperty('properties')) { + Object.keys(pro['properties']).forEach(function (key3) { + console.log(pro.properties[key3]); + if (pro.properties[key3].hasOwnProperty('title')) { + fieldset.dependencies[key][key1][i].properties[key2].properties[key3]['title'] = _self.translate.instant(pro.properties[key3].title); + } + }); + } + + }) + } + } + } + }) + } + }) + + this.dependencies = fieldset.dependencies; + + } + + this.definations[fieldset.definition].properties = {} + this.property[fieldset.definition] = {} + + this.property = this.definations[fieldset.definition].properties; + + if (fieldset.formclass) { + this.schema['widget'] = {}; + this.schema['widget']['formlyConfig'] = { fieldGroupClassName: fieldset.formclass } + } + + if (fieldset.fields[0] === "*") { + this.definations = this.responseData.definitions; + this.property = this.definations[fieldset.definition].properties; + fieldset.fields = this.property; + this.addFields(fieldset); + } else { + this.addFields(fieldset); + } + + if (fieldset.except) { + this.removeFields(fieldset) + } + }); + + this.ordering = this.formSchema.order; + this.schema["type"] = "object"; + this.schema["title"] = this.formSchema.title; + this.schema["definitions"] = this.definations; + this.schema["properties"] = this.property; + this.schema["required"] = this.required; + this.schema["dependencies"] = this.dependencies; + this.loadSchema(); + }, + (error) => { + this.toastMsg.error('error', this.translate.instant('SOMETHING_WENT_WRONG_WITH_SCHEMA_URL')) + }); + + }, (error) => { + this.toastMsg.error('error', 'forms.json not found in src/assets/config/ - You can refer to examples folder to create the file') + }) + } + + loadSchema() { + this.form2 = new FormGroup({}); + this.options = {}; + this.fields = [this.formlyJsonschema.toFieldConfig(this.schema)]; + + if (this.privacyCheck) { + this.visilibity(this.fields); + } + + if (this.headingTitle) { + this.fields[0].templateOptions.label = ''; + } + + if (this.add) { + this.model = {}; + } + this.schemaloaded = true; + } + + visilibity(fields) { + + if (fields[0].fieldGroup.length > 1 && fields[0].fieldGroup[0].type == "object") { + + fields[0].fieldGroup.forEach(fieldObj => { + + if (this.privateFields.length || this.internalFields.length) { + + let label = fieldObj.templateOptions.label; + let key = fieldObj.key.replace(/^./, fieldObj.key[0].toUpperCase()); + + if (this.schema.definitions[key] && this.schema.definitions[key].hasOwnProperty('description')) { + let desc = this.checkString(fieldObj.key, this.schema.definitions[key]['description']); + fieldObj.templateOptions.label = (label ? label : desc); + } + + if (this.privateFields.indexOf('$.' + fieldObj.key) >= 0) { + fieldObj.templateOptions['addonRight'] = { + class: "private-access d-flex flex-column", + text: this.translate.instant('ONLY_BY_CONSENT') + } + fieldObj.templateOptions.description = this.translate.instant('VISIBILITY_ATTRIBUTE_DEFINE'); + } else if (this.internalFields.indexOf('$.' + fieldObj.key) >= 0) { + fieldObj.templateOptions['addonRight'] = { + class: "internal-access d-flex flex-column", + text: this.translate.instant('ONLY_BY_ME') + } + fieldObj.templateOptions.description = this.translate.instant('VISIBILITY_ATTRIBUTE_DEFINE'); + } + } else { + fieldObj.templateOptions['addonRight'] = { + class: "public-access d-flex flex-column", + text: this.translate.instant('ANYONE') + } + fieldObj.templateOptions.description = this.translate.instant('VISIBILITY_ATTRIBUTE_DEFINE'); + } + }); + } else { + + if (this.privateFields.indexOf('$.' + fields[0].fieldGroup[0].key) >= 0) { + this.globalPrivacy = 'private-access'; + + } else if (this.internalFields.indexOf('$.' + fields[0].fieldGroup[0].key) >= 0) { + this.globalPrivacy = 'internal-access'; + } else if (!this.privateFields.length && !this.internalFields.length) { + this.globalPrivacy = 'public-access'; + + } + } + + + } + + checkProperty(fieldset, field) { + this.definations[field.children.definition] = this.responseData.definitions[field.children.definition]; + var ref_properties = {} + var ref_required = [] + if (field.children.fields && field.children.fields.length > 0) { + field.children.fields.forEach(reffield => { + + this.addWidget(field.children, reffield, field.name); + + if (reffield.required) { + ref_required.push(reffield.name) + } + + ref_properties[reffield.name] = this.responseData.definitions[field.children.definition].properties[reffield.name]; + }); + + if (this.responseData.definitions[fieldset.definition].properties.hasOwnProperty(field.name)) { + this.responseData.definitions[fieldset.definition].properties[field.name].properties = ref_properties; + } else { + this.responseData.definitions[fieldset.definition].properties = ref_properties; + + } + this.definations[field.children.definition].properties = ref_properties; + this.definations[field.children.definition].required = ref_required; + } + + } + + nastedChild(fieldset, fieldName, res) { + let tempArr = res; + + let temp_arr_fields = []; + let nastedArr = []; + + for (const key in tempArr) { + if (tempArr[key].hasOwnProperty('type') && tempArr[key].type == 'string') { + if (tempArr[key].type == 'string') { + temp_arr_fields.push({ 'name': key, 'type': tempArr[key].type }); + } + } else { + let res = this.responseData.definitions[fieldName.replace(/^./, fieldName[0].toUpperCase())].properties[key]; + if (res.hasOwnProperty('properties') || res.hasOwnProperty('$ref')) { + this.responseData.definitions[fieldName.replace(/^./, fieldName[0].toUpperCase())].properties[key].properties = tempArr[key].properties; + + for (const key1 in tempArr[key].properties) { + nastedArr.push({ 'name': key1, 'type': tempArr[key].properties[key1].type }); + }; + delete this.responseData.definitions[fieldName.replace(/^./, fieldName[0].toUpperCase())].properties[key]['$ref']; + + let temp2 = { + children: { + definition: fieldName.replace(/^./, fieldName[0].toUpperCase()) + '.properties.' + key, + fields: nastedArr + }, + name: key.toLowerCase() + } + + temp_arr_fields.push(temp2); + temp2.children.fields.forEach(reffield => { + this.addChildWidget(reffield, fieldName, key); + + }); + } else { + delete this.responseData.definitions[fieldName.replace(/^./, fieldName[0].toUpperCase())].properties[key]; + } + } + } + let temp_field = { + children: { + definition: fieldName.replace(/^./, fieldName[0].toUpperCase()), + fields: temp_arr_fields + }, + name: fieldName + } + this.checkProperty(fieldset, temp_field); + } + + addFields(fieldset) { + + if (fieldset.fields.length) { + + fieldset.fields.forEach(field => { + + if (this.responseData.definitions[fieldset.definition] && this.responseData.definitions[fieldset.definition].hasOwnProperty('properties')) { + let res = this.responseData.definitions[fieldset.definition].properties; + if (field.children) { + this.checkProperty(fieldset, field); + + if (this.responseData.definitions[fieldset.definition].properties[field.name].hasOwnProperty('properties')) { + let _self = this; + Object.keys(_self.responseData.definitions[fieldset.definition].properties[field.name].properties).forEach(function (key) { + if (_self.responseData.definitions[fieldset.definition].properties[field.name].properties[key].hasOwnProperty('properties')) { + Object.keys(_self.responseData.definitions[fieldset.definition].properties[field.name].properties[key].properties).forEach(function (key1) { + + _self.responseData.definitions[fieldset.definition].properties[field.name].properties[key].properties[key1].title = _self.checkString(key1, _self.responseData.definitions[fieldset.definition].properties[field.name].properties[key].properties[key1].title); + + + }); + + + } + console.log(key); + }); + } + + + } else if (this.responseData.definitions[fieldset.definition].properties.hasOwnProperty(field.name) && this.responseData.definitions[fieldset.definition].properties[field.name].hasOwnProperty('properties')) { + let res = this.responseData.definitions[fieldset.definition].properties[field.name].properties; + this.nastedChild(fieldset, field.name, res); + } + } + + if (field.validation) { + if (field.validation.hasOwnProperty('message')) { + field.validation['message'] = this.translate.instant(field.validation.message); + } + } + + if (field.children) { + if (field.children.fields) { + for (let i = 0; i < field.children.fields.length; i++) { + if (field.children.fields[i].hasOwnProperty('validation') && field.children.fields[i].validation.hasOwnProperty('message')) { + field.children.fields[i].validation['message'] = this.translate.instant(field.children.fields[i].validation.message); + this.responseData.definitions[fieldset.definition].properties[field.name].properties[field.children.fields[i].name]['widget']['formlyConfig']['validation']['messages']['pattern'] = this.translate.instant(field.children.fields[i].validation.message); + } + + } + } + + } + + if (field.custom && field.element) { + this.responseData.definitions[fieldset.definition].properties[field.name] = field.element; + if (field.element.hasOwnProperty('title')) { + this.responseData.definitions[fieldset.definition].properties[field.name]['title'] = this.translate.instant(field.element.title); + } + this.customFields.push(field.name); + } else { + this.addWidget(fieldset, field, '') + } + + this.definations[fieldset.definition].properties[field.name] = this.responseData.definitions[fieldset.definition].properties[field.name]; + + if (field.children && !field.children.title) { + if (this.property[field.name].title) { + delete this.property[field.name].title; + } + if (this.property[field.name].description) { + delete this.property[field.name].description; + } + + } + }); + } else { + let res = this.responseData.definitions[fieldset.definition].properties; + this.nastedChild(fieldset, fieldset.definition, res); + } + } + + removeFields(fieldset) { + fieldset.except.forEach(field => { + delete this.definations[fieldset.definition].properties[field]; + }); + } + + addLockIcon(responseData) { + if (responseData.access == 'private' && responseData.widget.formlyConfig.templateOptions['type'] != "hidden") { + if (!responseData.widget.formlyConfig.templateOptions['addonRight']) { + responseData.widget.formlyConfig.templateOptions['addonRight'] = {} + } + if (!responseData.widget.formlyConfig.templateOptions['attributes']) { + responseData.widget.formlyConfig.templateOptions['attributes'] = {} + } + responseData.widget.formlyConfig.templateOptions['addonRight'] = { + class: "private-access", + text: this.translate.instant('ONLY_BY_CONSENT') + + } + responseData.widget.formlyConfig.templateOptions['attributes'] = { + style: "width: 100%;" + } + + } else if (responseData.access == 'internal' && responseData.widget.formlyConfig.templateOptions['type'] != "hidden") { + if (!responseData.widget.formlyConfig.templateOptions['addonRight']) { + responseData.widget.formlyConfig.templateOptions['addonRight'] = {} + } + if (!responseData.widget.formlyConfig.templateOptions['attributes']) { + responseData.widget.formlyConfig.templateOptions['attributes'] = {} + } + responseData.widget.formlyConfig.templateOptions['addonRight'] = { + class: "internal-access", + text: this.translate.instant('ONLY_BY_ME') + + } + responseData.widget.formlyConfig.templateOptions['attributes'] = { + style: "width: 100%;" + } + } + } + + + checkString(conStr, title) { + this.translate.get(this.langKey + '.' + conStr).subscribe(res => { + let constr = this.langKey + '.' + conStr; + if (res != constr) { + this.titleVal = res; + } else { + this.titleVal = title; + } + }); + return this.titleVal; + } + + + addWidget(fieldset, field, childrenName) { + + this.translate.get(this.langKey + '.' + field.name).subscribe(res => { + let constr = this.langKey + '.' + field.name; + if (res != constr) { + this.responseData.definitions[fieldset.definition].properties[field.name].title = this.generalService.translateString(this.langKey + '.' + field.name); + } + }) + + if (field.widget) { + this.responseData.definitions[fieldset.definition].properties[field.name]['widget'] = field.widget; + } + else { + this.res = this.responseData.definitions[fieldset.definition].properties[field.name]; + + if (this.res != undefined && !this.res.hasOwnProperty('properties')) { + this.responseData.definitions[fieldset.definition].properties[field.name]['widget'] = { + "formlyConfig": { + "templateOptions": { + }, + "validation": {}, + "expressionProperties": {}, + "modelOptions": {} + } + + } + + if (field.placeholder) { + this.responseData.definitions[fieldset.definition].properties[field.name]['widget']['formlyConfig']['templateOptions']['placeholder'] = this.generalService.translateString(this.langKey + '.' + field.placeholder); + } + + if (field.description) { + this.responseData.definitions[fieldset.definition].properties[field.name]['widget']['formlyConfig']['templateOptions']['description'] = this.generalService.translateString(this.langKey + '.' + field.description); + } + + if (field.classGroup) { + this.responseData.definitions[fieldset.definition].properties[field.name]['widget']['formlyConfig']['fieldGroupClassName'] = field.classGroup; + } + if (field.expressionProperties) { + this.responseData.definitions[fieldset.definition].properties[field.name]['widget']['formlyConfig']['expressionProperties'] = field.expressionProperties; + } + if (field.class) { + this.responseData.definitions[fieldset.definition].properties[field.name]['widget']['formlyConfig']['className'] = field.class; + } + + if (this.responseData.definitions[fieldset.definition].properties[field.name].hasOwnProperty('items')) { + if (this.responseData.definitions[fieldset.definition].properties[field.name].items.hasOwnProperty('properties')) { + let _self = this; + Object.keys(_self.responseData.definitions[fieldset.definition].properties[field.name].items.properties).forEach(function (key) { + console.log(key); + _self.responseData.definitions[fieldset.definition].properties[field.name].items.properties[key].title = _self.checkString(key, _self.responseData.definitions[fieldset.definition].properties[field.name].items.properties[key].title); + + + }); + + } + } + + if (field.hidden) { + this.responseData.definitions[fieldset.definition].properties[field.name]['widget']['formlyConfig']['templateOptions']['type'] = "hidden"; + delete this.responseData.definitions[fieldset.definition].properties[field.name]['title'] + } + if (field.required || field.children) { + this.responseData.definitions[fieldset.definition].properties[field.name]['widget']['formlyConfig']['templateOptions']['required'] = field.required; + } + if (field.children) { + this.responseData.definitions[fieldset.definition].properties[field.name]['widget']['formlyConfig']['templateOptions']['required'] = true; + } + if (field.format && field.format === 'file') { + if (this.type && this.type.includes("property")) { + localStorage.setItem('property', this.type.split(":")[1]); + } + this.responseData.definitions[fieldset.definition].properties[field.name]['widget']['formlyConfig']['type'] = field.format; + if (field.multiple) { + this.responseData.definitions[fieldset.definition].properties[field.name]['widget']['formlyConfig']['templateOptions']['multiple'] = field.multiple; + } + this.fileFields.push(field.name); + } + + if (this.privacyCheck && this.responseData.definitions[fieldset.definition].properties[field.name]['widget']['formlyConfig']['templateOptions']['type'] != "hidden" && (this.privateFields.indexOf('$.' + childrenName) < 0) && (this.internalFields.indexOf('$.' + childrenName) < 0)) { + if (this.privateFields.length || this.internalFields.length) { + this.responseData.definitions[fieldset.definition].properties[field.name]['widget']['formlyConfig']['templateOptions'] = { + addonRight: { + class: "public-access", + text: this.translate.instant('ANYONE'), + }, + attributes: { + style: "width: 90%; " + }, + } + } + } + + if (field.validation) { + if (field.validation.message) { + this.responseData.definitions[fieldset.definition].properties[field.name]['widget']['formlyConfig']['validation'] = { + "messages": { + "pattern": field.validation.message + } + } + if (field.validation.pattern) { + this.responseData.definitions[fieldset.definition].properties[field.name]['pattern'] = field.validation.pattern; + } + } + if (field.validation.lessThan || field.validation.greaterThan) { + this.responseData.definitions[fieldset.definition].properties[field.name]['widget']['formlyConfig']['modelOptions'] = { + updateOn: 'blur' + }; + this.responseData.definitions[fieldset.definition].properties[field.name]['widget']['formlyConfig']['asyncValidators'] = {} + this.responseData.definitions[fieldset.definition].properties[field.name]['widget']['formlyConfig']['asyncValidators'][field.name] = {} + this.responseData.definitions[fieldset.definition].properties[field.name]['widget']['formlyConfig']['asyncValidators'][field.name]['expression'] = (control: FormControl) => { + if (control.value != null) { + if (field.type === 'date') { + if (this.model[field.validation.lessThan]) { + if ((new Date(this.model[field.validation.lessThan])).valueOf() > (new Date(control.value)).valueOf()) { + return of(control.value); + } + else { + return of(false); + } + } else if (this.model[field.validation.greaterThan]) { + if ((new Date(this.model[field.validation.greaterThan])).valueOf() < (new Date(control.value)).valueOf()) { + return of(control.value); + } + else { + return of(false); + } + } + } + else { + if (this.model[field.validation.lessThan]) { + if (this.model[field.validation.lessThan] > control.value) { + return of(control.value); + } + else { + return of(false); + } + } + else if (this.model[field.validation.greaterThan]) { + if (this.model[field.validation.greaterThan] < control.value) { + return of(control.value); + } + else { + return of(false); + } + } + else { + return of(false); + } + } + } + return new Promise((resolve, reject) => { + setTimeout(() => { + resolve(true); + }, 1000); + }); + } + this.responseData.definitions[fieldset.definition].properties[field.name]['widget']['formlyConfig']['asyncValidators'][field.name]['message'] = field.validation.message; + } + } + } + if (field.autofill) { + if (field.autofill.apiURL) { + this.responseData.definitions[fieldset.definition].properties[field.name]['widget']['formlyConfig']['modelOptions'] = { + updateOn: 'blur' + }; + this.responseData.definitions[fieldset.definition].properties[field.name]['widget']['formlyConfig']['asyncValidators'] = {} + this.responseData.definitions[fieldset.definition].properties[field.name]['widget']['formlyConfig']['asyncValidators'][field.name] = {} + this.responseData.definitions[fieldset.definition].properties[field.name]['widget']['formlyConfig']['asyncValidators'][field.name]['expression'] = (control: FormControl) => { + if (control.value != null) { + if (field.autofill.method === 'GET') { + var apiurl = field.autofill.apiURL.replace("{{value}}", control.value) + this.generalService.getPrefillData(apiurl).subscribe((res) => { + if (field.autofill.fields) { + field.autofill.fields.forEach(element => { + for (var [key1, value1] of Object.entries(element)) { + this.createPath(this.model, key1, this.ObjectbyString(res, value1)) + this.form2.get(key1).setValue(this.ObjectbyString(res, value1)) + } + }); + } + if (field.autofill.dropdowns) { + field.autofill.dropdowns.forEach(element => { + for (var [key1, value1] of Object.entries(element)) { + if (Array.isArray(res)) { + res = res[0] + } + this.schema["properties"][key1]['items']['enum'] = this.ObjectbyString(res, value1) + } + }); + } + }); + } + else if (field.autofill.method === 'POST') { + var datapath = this.findPath(field.autofill.body, "{{value}}", '') + if (datapath) { + var dataobject = this.setPathValue(field.autofill.body, datapath, control.value) + this.generalService.postPrefillData(field.autofill.apiURL, dataobject).subscribe((res) => { + if (Array.isArray(res)) { + res = res[0] + } + if (field.autofill.fields) { + field.autofill.fields.forEach(element => { + + for (var [key1, value1] of Object.entries(element)) { + this.createPath(this.model, key1, this.ObjectbyString(res, value1)) + this.form2.get(key1).setValue(this.ObjectbyString(res, value1)) + } + }); + } + if (field.autofill.dropdowns) { + field.autofill.dropdowns.forEach(element => { + for (var [key1, value1] of Object.entries(element)) { + this.schema["properties"][key1]['items']['enum'] = this.ObjectbyString(res, value1) + } + }); + } + }); + } + } + } + return new Promise((resolve, reject) => { + setTimeout(() => { + resolve(true); + }, 1000); + }); + } + } + } + if (field.autocomplete) { + + this.responseData.definitions[fieldset.definition].properties[field.name]['widget']['formlyConfig']['type'] = "autocomplete"; + this.responseData.definitions[fieldset.definition].properties[field.name]['widget']['formlyConfig']['templateOptions']['placeholder'] = this.generalService.translateString(this.responseData.definitions[fieldset.definition].properties[field.name]['title']); + this.responseData.definitions[fieldset.definition].properties[field.name]['widget']['formlyConfig']['templateOptions']['label'] = field.autocomplete.responseKey; + var dataval = "{{value}}" + this.responseData.definitions[fieldset.definition].properties[field.name]['widget']['formlyConfig']['templateOptions']['search$'] = (term) => { + if (term || term != '') { + var datapath = this.findPath(field.autocomplete.body, dataval, '') + this.setPathValue(field.autocomplete.body, datapath, term) + + dataval = term; + this.generalService.postData(field.autocomplete.apiURL, field.autocomplete.body).subscribe(async (res) => { + let items = res; + items = items.filter(x => x[field.autocomplete.responseKey].toLocaleLowerCase().indexOf(term.toLocaleLowerCase()) > -1); + if (items) { + this.searchResult = items; + return observableOf(this.searchResult); + } + }); + } + return observableOf(this.searchResult); + } + } + if (field.type) { + + if (field.type === 'multiselect') { + this.responseData.definitions[fieldset.definition].properties[field.name]['widget']['formlyConfig']['type'] = field.type; + this.responseData.definitions[fieldset.definition].properties[field.name]['widget']['formlyConfig']['templateOptions']['multiple'] = true; + if (field.required) { + this.responseData.definitions[fieldset.definition].properties[field.name]['widget']['formlyConfig']['templateOptions']['placeholder'] = this.translate.instant("SELECT") + ' ' + this.generalService.translateString(this.langKey + '.' + field.name) + "*"; + } else { + this.responseData.definitions[fieldset.definition].properties[field.name]['widget']['formlyConfig']['templateOptions']['placeholder'] = this.translate.instant("SELECT") + ' ' + this.generalService.translateString(this.langKey + '.' + field.name); + } + + this.responseData.definitions[fieldset.definition].properties[field.name]['widget']['formlyConfig']['templateOptions']['options'] = []; + this.responseData.definitions[fieldset.definition].properties[field.name]['items']['enum'].forEach(enumval => { + this.responseData.definitions[fieldset.definition].properties[field.name]['widget']['formlyConfig']['templateOptions']['options'].push({ label: enumval, value: enumval }) + }); + } + else if (field.type === 'date') { + this.responseData.definitions[fieldset.definition].properties[field.name]['widget']['formlyConfig']['templateOptions']['type'] = 'date'; + if (field.validation && field.validation.future == false) { + this.responseData.definitions[fieldset.definition].properties[field.name]['widget']['formlyConfig']['modelOptions'] = { + updateOn: 'blur' + }; + this.responseData.definitions[fieldset.definition].properties[field.name]['widget']['formlyConfig']['asyncValidators'] = {} + this.responseData.definitions[fieldset.definition].properties[field.name]['widget']['formlyConfig']['asyncValidators'][field.name] = {} + this.responseData.definitions[fieldset.definition].properties[field.name]['widget']['formlyConfig']['asyncValidators'][field.name]['expression'] = (control: FormControl) => { + if (control.value != null) { + if ((new Date(control.value)).valueOf() < Date.now()) { + return of(control.value); + } else { + return of(false); + } + } + return new Promise((resolve, reject) => { + setTimeout(() => { + resolve(true); + }, 1000); + }); + }; + this.responseData.definitions[fieldset.definition].properties[field.name]['widget']['formlyConfig']['asyncValidators'][field.name]['message'] = this.translate.instant('DATE_MUST_BIGGER_TO_TODAY_DATE'); + } + } + else { + this.responseData.definitions[fieldset.definition].properties[field.name]['widget']['formlyConfig']['templateOptions']['type'] = field.type; + } + } + if (field.disabled || field.disable) { + this.responseData.definitions[fieldset.definition].properties[field.name]['widget']['formlyConfig']['templateOptions']['disabled'] = field.disabled + }; + + + if ((this.privateFields.indexOf('$.' + childrenName) < 0) || (this.internalFields.indexOf('$.' + childrenName) < 0)) { + + let temp_access_field = '$.' + childrenName + '.' + field.name; + + if (this.privateFields.includes(temp_access_field) && (this.privateFields.indexOf('$.' + childrenName) < 0)) { + this.responseData.definitions[fieldset.definition].properties[field.name].access = 'private'; + this.addLockIcon(this.responseData.definitions[fieldset.definition].properties[field.name]); + + + } else if (this.internalFields.includes(temp_access_field) && (this.internalFields.indexOf('$.' + childrenName) < 0)) { + this.responseData.definitions[fieldset.definition].properties[field.name].access = 'internal'; + this.addLockIcon(this.responseData.definitions[fieldset.definition].properties[field.name]); + } + } + } + } + + addChildWidget(field, ParentName, childrenName) { + this.res = this.responseData.definitions[ParentName.replace(/^./, ParentName[0].toUpperCase())].properties[childrenName]; + this.res.properties[field.name].title = this.checkString(field.name, this.res.properties[field.name].title); + if (field.widget) { + this.res.properties[field.name]['widget'] = field.widget; + } + else { + + this.res.properties[field.name]['widget'] = { + "formlyConfig": { + "templateOptions": { + + }, + "validation": {}, + "expressionProperties": {} + } + } + + if (this.privacyCheck && (this.privateFields.indexOf('$.' + ParentName) < 0) && (this.internalFields.indexOf('$.' + ParentName) < 0)) { + if (!this.res.properties[field.name]['widget']['formlyConfig']['templateOptions']['addonRight']) { + this.res.properties[field.name]['widget']['formlyConfig']['templateOptions']['addonRight'] = {} + } + if (!this.res.properties[field.name]['widget']['formlyConfig']['templateOptions']['attributes']) { + this.res.properties[field.name]['widget']['formlyConfig']['templateOptions']['attributes'] = {} + } + this.res.properties[field.name]['widget']['formlyConfig']['templateOptions']['addonRight'] = { + class: "public-access", + text: this.translate.instant('ANYONE') + } + this.res.properties[field.name]['widget']['formlyConfig']['templateOptions']['attributes'] = { + style: "width: 90%;" + } + } + + if (field.disabled || field.disable) { + this.res.properties[field.name]['widget']['formlyConfig']['templateOptions']['disabled'] = field.disabled + }; + + let temp_access_field = '$.' + ParentName + '.' + childrenName + '.' + field.name; + + if ((this.privateFields.indexOf('$.' + ParentName) < 0) || (this.privateFields.indexOf('$.' + ParentName) < 0)) { + + if (this.privateFields.includes(temp_access_field)) { + this.res.properties[field.name].access = 'private'; + this.addLockIcon(this.res.properties[field.name]); + + } else if (this.internalFields.includes(temp_access_field)) { + this.res.properties[field.name].access = 'internal'; + this.addLockIcon(this.res.properties[field.name]); + } + } + + this.responseData.definitions[ParentName.replace(/^./, ParentName[0].toUpperCase())].properties[childrenName] = this.res; + + } + }; + + submit() { +this.isSubmitForm = true; + if (this.fileFields.length > 0) { + this.fileFields.forEach(fileField => { + if (this.model[fileField]) { + var formData = new FormData(); + for (let i = 0; i < this.model[fileField].length; i++) { + const file = this.model[fileField][i] + formData.append("files", file); + } + + if (this.type && this.type.includes("property")) { + var property = this.type.split(":")[1]; + } + + let id = (this.entityId) ? this.entityId : this.identifier; + var url = [this.apiUrl, id , property, 'documents'] + this.generalService.postData(url.join('/'), formData).subscribe((res) => { + var documents_list: any[] = []; + var documents_obj = { + "fileName": "", + "format": "file" + } + res.documentLocations.forEach(element => { + documents_obj.fileName = element; + documents_list.push(documents_obj); + }); + + this.model[fileField] = documents_list; + if (this.type && this.type === 'entity') { + + if (this.identifier != null) { + this.updateData() + } else { + this.postData() + } + } + else if (this.type && this.type.includes("property")) { + var property = this.type.split(":")[1]; + + if (this.identifier != null && this.entityId != undefined) { + var url = [this.apiUrl, this.entityId, property, this.identifier]; + } else { + var url = [this.apiUrl, this.identifier, property]; + } + + this.apiUrl = (url.join("/")); + if (this.model[property]) { + this.model = this.model[property]; + } + + + this.postData(); + + if (this.model.hasOwnProperty('attest') && this.model['attest']) { + this.raiseClaim(property); + } + } + }, (err) => { + console.log(err); + this.toastMsg.error('error', this.translate.instant('SOMETHING_WENT_WRONG')) + }); + } + else { + if (this.type && this.type === 'entity') { + + if (this.identifier != null) { + this.updateData() + } else { + this.postData() + } + } + else if (this.type && this.type.includes("property")) { + var property = this.type.split(":")[1]; + + if (this.identifier != null && this.entityId != undefined) { + var url = [this.apiUrl, this.entityId, property, this.identifier]; + } else { + var url = [this.apiUrl, this.identifier, property]; + } + + this.apiUrl = (url.join("/")); + if (this.model[property]) { + this.model = this.model[property]; + } + + + if (this.identifier != null && this.entityId != undefined) { + this.updateClaims() + } else { + this.postData() + } + + if (this.model.hasOwnProperty('attest') && this.model['attest']) { + this.raiseClaim(property); + } + + } + } + }); + } + else { + if (this.type && this.type === 'entity') { + + if (this.identifier != null) { + this.updateData() + } else { + this.postData() + } + } + else if (this.type && this.type.includes("property")) { + var property = this.type.split(":")[1]; + + if (this.identifier != null && this.entityId != undefined) { + var url = [this.apiUrl, this.entityId, property, this.identifier]; + } else { + var url = [this.apiUrl, this.identifier, property]; + } + + this.apiUrl = (url.join("/")); + if (this.model[property]) { + this.model = this.model[property]; + } + + if (this.identifier != null && this.entityId != undefined) { + this.updateClaims() + } else { + this.postData() + } + + if (this.model.hasOwnProperty('attest') && this.model['attest']) { + this.raiseClaim(property); + } + + } + } + } + + async raiseClaim(property) { + setTimeout(() => { + this.generalService.getData(this.entityUrl).subscribe((res) => { + + res = (res[0]) ? res[0] : res; + this.entityId = res.osid; + if (res.hasOwnProperty(property)) { + + if (!this.propertyId && !this.sorder) { + + /* var tempObj = [] + for (let j = 0; j < res[property].length; j++) { + res[property][j].osUpdatedAt = new Date(res[property][j].osUpdatedAt); + tempObj.push(res[property][j]) + } + + // tempObj.sort((a, b) => (b.osUpdatedAt) - (a.osUpdatedAt)); + this.propertyId = tempObj[0]["osid"];*/ + + res[property].sort((a, b) => (b.sorder) - (a.sorder)); + this.propertyId = res[property][0]["osid"]; + + } + + if(this.sorder) + { + var result = res[property].filter(obj => { + return obj.sorder === this.sorder + }) + + this.propertyId = result[0]["osid"]; + } + + var temp = {}; + temp[property] = [this.propertyId]; + let propertyUniqueName = this.entityName.toLowerCase() + property.charAt(0).toUpperCase() + property.slice(1); + + propertyUniqueName = (this.entityName == 'student' || this.entityName == 'Student') ? 'studentInstituteAttest' : propertyUniqueName; + + let data = { + "entityName": this.entityName.charAt(0).toUpperCase() + this.entityName.slice(1), + "entityId": this.entityId, + "name": propertyUniqueName, + "propertiesOSID": temp, + "additionalInput":{ + "notes": this.model['notes'] + } + } + this.sentToAttestation(data); + } + + }); + }, 1000); + + } + + sentToAttestation(data) { + this.generalService.attestationReq('/send', data).subscribe((res) => { + if (res.params.status == 'SUCCESSFUL') { + this.router.navigate([this.redirectTo]) + } + else if (res.params.errmsg != '' && res.params.status == 'UNSUCCESSFUL') { + this.toastMsg.error('error', res.params.errmsg); + this.isSubmitForm = false; + + } + }, (err) => { + this.toastMsg.error('error', err.error.params.errmsg); + this.isSubmitForm = false; + + }); + + } + + filtersearchResult(term: string) { + if (term && term != '') { + var formData = { + "filters": { + "instituteName": { + "contains": term + } + }, + "limit": 20, + "offset": 0 + } + this.generalService.postData('/Institute/search', formData).subscribe(async (res) => { + let items = res; + items = await items.filter(x => x.instituteName.toLocaleLowerCase().indexOf(term.toLocaleLowerCase()) > -1); + if (items) { + return items; + } + }); + } + } + + getNotes() { +let entity = this.entityName.charAt(0).toUpperCase() + this.entityName.slice(1); + this.generalService.getData(entity).subscribe((res) => { + res = (res[0]) ? res[0] : res; + + + let propertyUniqueName = this.entityName.toLowerCase() + this.propertyName.charAt(0).toUpperCase() + this.propertyName.slice(1); + propertyUniqueName = (this.entityName == 'student' || this.entityName == 'Student') ? 'studentInstituteAttest' : propertyUniqueName; + + if (res.hasOwnProperty(propertyUniqueName)) { + + let attestionRes= res[propertyUniqueName]; + + + var tempObj = []; + + for (let j = 0; j < attestionRes.length; j++) { + if (this.propertyId == attestionRes[j].propertiesOSID[this.propertyName][0]) { + attestionRes[j].propertiesOSID.osUpdatedAt = new Date(attestionRes[j].propertiesOSID.osUpdatedAt); + tempObj.push(attestionRes[j]) + } + } + + tempObj.sort((a, b) => (b.propertiesOSID.osUpdatedAt) - (a.osUpdatedAt)); + let claimId = tempObj[0]["_osClaimId"]; + + + if(claimId) + { + this.generalService.getData(entity + "/claims/" + claimId).subscribe((res) => { + this.notes = res.notes; + }); + } + + } + }); + + + } + + getData() { + var get_url; + if (this.identifier) { + get_url = this.propertyName + '/' + this.identifier; + } else { + get_url = this.apiUrl + } + this.generalService.getData(get_url).subscribe((res) => { + res = (res[0]) ? res[0] : res; + if (this.propertyName && this.entityId) { + this.getNotes(); + } + + this.model = res; + this.identifier = res.osid; + this.loadSchema() + }); + } + + async postData() { + if (Array.isArray(this.model)) { + this.model = this.model[0]; + } + this.model['sorder'] = this.exLength; + await this.generalService.postData(this.apiUrl, this.model).subscribe((res) => { + if (res.params.status == 'SUCCESSFUL' && !this.model['attest']) { + this.router.navigate([this.redirectTo]) + } + else if (res.params.errmsg != '' && res.params.status == 'UNSUCCESSFUL') { + this.toastMsg.error('error', res.params.errmsg); + this.isSubmitForm = false; + + } + }, (err) => { + this.toastMsg.error('error', err.error.params.errmsg); + this.isSubmitForm = false; + }); + + } + + updateData() { + this.generalService.putData(this.apiUrl, this.identifier, this.model).subscribe((res) => { + if (res.params.status == 'SUCCESSFUL' && !this.model['attest']) { + this.router.navigate([this.redirectTo]) + } + else if (res.params.errmsg != '' && res.params.status == 'UNSUCCESSFUL') { + this.toastMsg.error('error', res.params.errmsg); + this.isSubmitForm = false; + } + }, (err) => { + this.toastMsg.error('error', err.error.params.errmsg); + this.isSubmitForm = false; + + }); + } + + ObjectbyString = function (o, s) { + s = s.replace(/\[(\w+)\]/g, '.$1'); + s = s.replace(/^\./, ''); + var a = s.split('.'); + for (var i = 0, n = a.length; i < n; ++i) { + var k = a[i]; + if (k in o) { + o = o[k]; + } else { + return; + } + } + return o; + }; + + createPath = (obj, path, value = null) => { + path = typeof path === 'string' ? path.split('.') : path; + let current = obj; + while (path.length > 1) { + const [head, ...tail] = path; + path = tail; + if (current[head] === undefined) { + current[head] = {}; + } + current = current[head]; + } + current[path[0]] = value; + return obj; + }; + + findPath = (obj, value, path) => { + if (typeof obj !== 'object') { + return false; + } + for (var key in obj) { + if (obj.hasOwnProperty(key)) { + var t = path; + var v = obj[key]; + var newPath = path ? path.slice() : []; + newPath.push(key); + if (v === value) { + return newPath; + } else if (typeof v !== 'object') { + newPath = t; + } + var res = this.findPath(v, value, newPath); + if (res) { + return res; + } + } + } + return false; + } + + setPathValue(obj, path, value) { + var keys; + if (typeof path === 'string') { + keys = path.split("."); + } + else { + keys = path; + } + const propertyName = keys.pop(); + let propertyParent = obj; + while (keys.length > 0) { + const key = keys.shift(); + if (!(key in propertyParent)) { + propertyParent[key] = {}; + } + propertyParent = propertyParent[key]; + } + propertyParent[propertyName] = value; + return obj; + } + + getEntityData(apiUrl) { + if (this.identifier !== undefined) { + this.generalService.getData(apiUrl).subscribe((res) => { + this.entityId = res[0].osid; + this.exLength = res[0][this.propertyName].length; + + }); + }else{ + this.generalService.getData(apiUrl).subscribe((res) => { + this.exLength = res[0][this.propertyName].length; + }); + } + + } + + updateClaims() { + this.sorder = this.model.hasOwnProperty('sorder')? this.model['sorder'] : ''; + + this.generalService.updateclaims(this.apiUrl, this.model).subscribe((res) => { + if (res.params.status == 'SUCCESSFUL' && !this.model['attest']) { + this.router.navigate([this.redirectTo]) + } + else if (res.params.errmsg != '' && res.params.status == 'UNSUCCESSFUL') { + this.toastMsg.error('error', res.params.errmsg) + } + }, (err) => { + this.toastMsg.error('error', err.error.params.errmsg); + }); + } + +} + + diff --git a/src/app/forms/types/array.type.ts b/src/app/forms/types/array.type.ts new file mode 100644 index 0000000..f0dd634 --- /dev/null +++ b/src/app/forms/types/array.type.ts @@ -0,0 +1,29 @@ +import { Component } from '@angular/core'; +import { FieldArrayType } from '@ngx-formly/core'; + +@Component({ + selector: 'formly-array-type', + template: ` +
+ {{ to.label }} +

{{ to.description }}

+ + + +
+ +
+ +
+
+ +
+ +
+
+ `, +}) +export class ArrayTypeComponent extends FieldArrayType {} + diff --git a/src/app/forms/types/autocomplete.type.ts b/src/app/forms/types/autocomplete.type.ts new file mode 100644 index 0000000..d0252df --- /dev/null +++ b/src/app/forms/types/autocomplete.type.ts @@ -0,0 +1,41 @@ +import { startWith, switchMap, takeUntil, filter, debounceTime, distinctUntilChanged } from 'rxjs/operators'; +import { Component, EventEmitter, OnDestroy } from '@angular/core'; +import { FieldType } from '@ngx-formly/core'; +import { Subject } from 'rxjs'; + +@Component({ + selector: 'formly-autocomplete-type', + template: ` + +
+ `, +}) +export class AutocompleteTypeComponent extends FieldType implements OnDestroy { + onDestroy$ = new Subject(); + search$ = new EventEmitter(); + bind$; + options$; + + ngOnInit() { + this.options$ = this.search$.pipe( + takeUntil(this.onDestroy$), + startWith(''), + filter(v => v !== null), + debounceTime(200), + distinctUntilChanged(), + switchMap(this.to.search$), + ); + + this.options$.subscribe(); + } + + ngOnDestroy() { + this.onDestroy$.complete(); + } +} \ No newline at end of file diff --git a/src/app/forms/types/color.type.ts b/src/app/forms/types/color.type.ts new file mode 100644 index 0000000..f8a6504 --- /dev/null +++ b/src/app/forms/types/color.type.ts @@ -0,0 +1,22 @@ +import { Component } from '@angular/core'; +import { FieldType } from '@ngx-formly/core'; + +@Component({ + selector: 'formly-field-input', + template: ` + + + `, +}) +export class FormlyColorInput extends FieldType { + public color: string = '#FFFFFF'; + test(event){ + this.formControl.patchValue(event); + // this.field.model[this.key] = event; + + } + +} \ No newline at end of file diff --git a/src/app/forms/types/file-value-accessor.ts b/src/app/forms/types/file-value-accessor.ts new file mode 100644 index 0000000..826527a --- /dev/null +++ b/src/app/forms/types/file-value-accessor.ts @@ -0,0 +1,24 @@ +import { Directive } from '@angular/core'; +import { NG_VALUE_ACCESSOR, ControlValueAccessor } from '@angular/forms'; + +@Directive({ + // tslint:disable-next-line + selector: 'input[type=file]', + host: { + '(change)': 'onChange($event.target.files)', + '(blur)': 'onTouched()', + }, + providers: [ + { provide: NG_VALUE_ACCESSOR, useExisting: FileValueAccessor, multi: true }, + ], +}) +// https://github.com/angular/angular/issues/7341 +export class FileValueAccessor implements ControlValueAccessor { + value: any; + onChange = (_) => { }; + onTouched = () => { }; + + writeValue(value) { } + registerOnChange(fn: any) { this.onChange = fn; } + registerOnTouched(fn: any) { this.onTouched = fn; } +} diff --git a/src/app/forms/types/file.type.ts b/src/app/forms/types/file.type.ts new file mode 100644 index 0000000..6c47ae7 --- /dev/null +++ b/src/app/forms/types/file.type.ts @@ -0,0 +1,157 @@ +import { Component, ElementRef, Input, NgModule, ViewChild } from '@angular/core'; +import { FieldType } from '@ngx-formly/core'; +import { FormsModule, ReactiveFormsModule } from '@angular/forms'; +import { Observable } from 'rxjs'; +import { GeneralService } from 'src/app/services/general/general.service'; + +import { DomSanitizer } from '@angular/platform-browser'; + +@Component({ + selector: 'formly-field-file', + styleUrls: ["../forms.component.scss"], + template: ` +
+
+
+ + + + +
+
+
+
+
+ {{ file.name }} +
+ `, +}) + + +export class FormlyFieldFile extends FieldType { + data: any; + fileName = ''; + lable = '+ Upload File'; + color = 'blue' + icon = 'fa fa-plus' + @ViewChild("fileinput") el: ElementRef; + selectedFiles: File[]; + constructor(public sanitizer: DomSanitizer) { + super(); + } + ngOnInit(): void {} + openFileInput() { + this.el.nativeElement.click(); + } + + // this.uploadLAbel = this.generalService.translateString(generalService); + + onDelete(index) { + // this.formControl.reset(); + console.log(this.selectedFiles); + this.selectedFiles.splice(index, 1); + + this.formControl.patchValue(this.selectedFiles); + console.log("Form Control Value", this.formControl.value); + } + onChange(event) { + this.selectedFiles = Array.from(event.target.files); + console.log(this.selectedFiles); + } + getSanitizedImageUrl(file: File) { + return this.sanitizer.bypassSecurityTrustUrl( + window.URL.createObjectURL(file) + ); + } + isImage(file: File): boolean { + return /^image\//.test(file.type); + } + + fileChanged(event: any) { + // const file: File = event.target.files[0]; + + // if (file) { + // this.lable = 'Uploading ' + file.name + // this.color = 'orange'; + // this.icon = 'fa fa-clock-o'; + // this.fileName = file.name; + // const formData = new FormData(); + // formData.append("files", file); + // var url = ['', localStorage.getItem('entity'), localStorage.getItem('osid'), localStorage.getItem('property'), 'documents'] + // this.generalService.postData(url.join('/'), formData).subscribe((res) => { + // console.log('res', res); + // var documents = []; + // var documents_obj = { + // "fileName": "", + // "format": "file" + // } + // res.documentLocations.forEach(element => { + // documents_obj.fileName = element; + // documents.push(documents_obj); + // }); + // localStorage.setItem('documents', JSON.stringify(documents)); + // this.lable = file.name + // this.color = 'green'; + // this.icon = 'fa fa-check-circle' + // }, (err) => { + // this.lable = 'Something went wrong with ' + file.name + // }); + // } + + // // if (event.target.files && event.target.files[0]) { + // // var filesAmount = event.target.files.length; + // // for (let i = 0; i < filesAmount; i++) { + // // var reader = new FileReader(); + // // reader.onload = (event: any) => { + // // console.log(event.target.result); + // // this.data = event.target.result; + // // console.log(this.formControl); + // // console.log(this.field.templateOptions); + // // this.formControl.patchValue(event.target.result) + // // console.log('1', this.data); + // // var formData: FormData = new FormData(); + + // // formData.append('files', this.data); + // // console.log('Form Data', formData); + // // var url = ['', localStorage.getItem('entity'), localStorage.getItem('osid'), localStorage.getItem('property'), 'documents'] + // // this.generalService.postData(url.join('/'), formData).subscribe((res) => { + // // console.log('res', res) + // // // if (res.params.status == 'SUCCESSFUL') { + // // // console.log('res Success', res.params.status) + // // // // this.router.navigate([this.redirectTo]) + // // // } + // // // else if (res.params.errmsg != '' && res.params.status == 'UNSUCCESSFUL') { + // // // console.log('error', res.params.errmsg) + // // // } + // // }, (err) => { + // // console.log('error2', err.error.params.errmsg) + // // }); + // // } + // // reader.readAsDataURL(event.target.files[i]); + // // // this.data = event.target.result; + + // // } + + // // } + } +} + + + // constructor(public generalService: GeneralService) { + // super(); + // } + + + + +// } diff --git a/src/app/forms/types/group.type.ts b/src/app/forms/types/group.type.ts new file mode 100644 index 0000000..d363697 --- /dev/null +++ b/src/app/forms/types/group.type.ts @@ -0,0 +1,16 @@ +import { Component } from '@angular/core'; +import { FieldWrapper } from '@ngx-formly/core'; + +@Component({ + selector: 'formly-wrapper-panel', + template: ` +
+

{{ to.label }}

+
+ +
+
+ `, +}) +export class PanelWrapperComponent extends FieldWrapper { +} \ No newline at end of file diff --git a/src/app/forms/types/horizontal.wrapper.ts b/src/app/forms/types/horizontal.wrapper.ts new file mode 100644 index 0000000..7eeb60e --- /dev/null +++ b/src/app/forms/types/horizontal.wrapper.ts @@ -0,0 +1,23 @@ +import { Component } from '@angular/core'; +import { FieldWrapper } from '@ngx-formly/core'; + +@Component({ + selector: 'formly-horizontal-wrapper', + template: ` +
+ +
+ +
+ +
+ +
+
+ `, +}) +export class FormlyHorizontalWrapper extends FieldWrapper { +} diff --git a/src/app/forms/types/multischema.type.ts b/src/app/forms/types/multischema.type.ts new file mode 100644 index 0000000..89a1a4a --- /dev/null +++ b/src/app/forms/types/multischema.type.ts @@ -0,0 +1,20 @@ +import { Component } from '@angular/core'; +import { FieldType } from '@ngx-formly/core'; + +@Component({ + selector: 'formly-multi-schema-type', + template: ` +
+
+ {{ to.label }} +

{{ to.description }}

+ + +
+
+ `, +}) +export class MultiSchemaTypeComponent extends FieldType {} + diff --git a/src/app/forms/types/multiselect.type.ts b/src/app/forms/types/multiselect.type.ts new file mode 100644 index 0000000..54816ae --- /dev/null +++ b/src/app/forms/types/multiselect.type.ts @@ -0,0 +1,20 @@ +import { Component } from '@angular/core'; +import { FieldType } from '@ngx-formly/core'; + +@Component({ + selector: 'formly-field-ng-select', + template: ` + + + `, +}) +export class FormlyFieldNgSelect extends FieldType { + get labelProp(): string { return this.to.labelProp || 'label'; } + get valueProp(): string { return this.to.valueProp || 'value'; } + get groupProp(): string { return this.to.groupProp || 'group'; } +} \ No newline at end of file diff --git a/src/app/forms/types/null.type.ts b/src/app/forms/types/null.type.ts new file mode 100644 index 0000000..ef1153b --- /dev/null +++ b/src/app/forms/types/null.type.ts @@ -0,0 +1,9 @@ +import { Component } from '@angular/core'; +import { FieldType } from '@ngx-formly/core'; + +@Component({ + selector: 'formly-null-type', + template: '', +}) +export class NullTypeComponent extends FieldType {} + diff --git a/src/app/forms/types/object.type.ts b/src/app/forms/types/object.type.ts new file mode 100644 index 0000000..2bd978b --- /dev/null +++ b/src/app/forms/types/object.type.ts @@ -0,0 +1,19 @@ +import { Component } from '@angular/core'; +import { FieldType } from '@ngx-formly/core'; + +@Component({ + selector: 'formly-object-type', + template: ` +
+ {{ to.label }} +

{{ to.description }}

+ + +
+ `, +}) +export class ObjectTypeComponent extends FieldType {} + + diff --git a/src/app/forms/types/repeat.type.ts b/src/app/forms/types/repeat.type.ts new file mode 100644 index 0000000..0e4c0af --- /dev/null +++ b/src/app/forms/types/repeat.type.ts @@ -0,0 +1,23 @@ +import { Component } from '@angular/core'; +import { FieldArrayType } from '@ngx-formly/core'; + +@Component({ + selector: 'formly-repeat-section', + template: ` +
+ +
+ +
+
+
+ +
+ `, +}) +export class RepeatTypeComponent extends FieldArrayType {} + + +/** Copyright 2018 Google Inc. All Rights Reserved. + Use of this source code is governed by an MIT-style license that + can be found in the LICENSE file at http://angular.io/license */ \ No newline at end of file diff --git a/src/app/header/header.component.html b/src/app/header/header.component.html new file mode 100644 index 0000000..e8e8437 --- /dev/null +++ b/src/app/header/header.component.html @@ -0,0 +1,90 @@ + +
+ + + +
diff --git a/src/app/header/header.component.scss b/src/app/header/header.component.scss new file mode 100644 index 0000000..8da3294 --- /dev/null +++ b/src/app/header/header.component.scss @@ -0,0 +1,144 @@ +.logo-text { + font-size: large; +} + +.card-body { + flex: 1 1 auto; + padding: 4rem 6rem; +} + +.btn-primary { + color: #fff; + background-color: #288ebc; + width: -webkit-fill-available; +} + +.sitetitle{ + text-align: center; + font-size: x-large; + font-family: serif; + margin: 9px; +} + +.card { + border: 1; + box-shadow: 0 10px 20px 0 rgb(0 0 0 / 5%); + background-color: white; + border-color: #efefef; +} + +hr { + margin: 0; + margin-bottom: -20px; + color: #443df6; + opacity: 1; + height: 2px; +} + +.nav-tabs .nav-item { + margin-bottom: -25px; +} + +.notification { + text-decoration: none; + position: relative; + display: inline-block; + border-radius: 2px; +} + +.notification .badge { + position: absolute; + top: 4px; + right: -8px; + padding: 2px 4px; + border-radius: 50%; + background-color: red; + color: white; +} + +.w-20 { + width: 20%; + height: auto; + max-width: 20%; +} + +.w-23 { + width: 23%; + height: auto; + max-width: 23%; +} + +.nav-b { + bottom: 2px; +} + +.lang-btn { + background: var(--headerColor); + font-size: 14px; + border: 0; + outline: 0; + width: 65px; +} + +.header { + position: fixed; + top: 0; + width: 100%; + z-index: 2; + @media (max-width: 767.98px) { + .custom-header { + justify-content: normal !important; + .logo-text { + width: calc(100% - 30px); + // text-align: center; + a { + display: inline-block; + } + } + } + } + @media (max-width: 991.98px) { + .custom-header { + justify-content: normal !important; + .logo-text { + width: calc(100% - 30px); + // text-align: center; + a { + display: inline-block; + } + } + } + } +} +.banner{ + background: black; + color: white; + display: flex; + justify-content: space-between; + align-items: center; + font-size: 14px; + height: 42px; + margin: 0; + width: 100%; + text-align: center; + font-family: -apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol"; +} + +@media (max-width: 767.98px) { + .banner{ + height:64px; + padding: 11px 26px; + background: black; + color: white; + display: flex; + justify-content: space-between; + align-items: center; + font-size: 14px; + margin: 0; + width: 100%; + text-align: center; + font-family: -apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol"; + + } + +} diff --git a/src/app/header/header.component.spec.ts b/src/app/header/header.component.spec.ts new file mode 100644 index 0000000..7a0d437 --- /dev/null +++ b/src/app/header/header.component.spec.ts @@ -0,0 +1,25 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { HeaderComponent } from './header.component'; + +describe('HeaderComponent', () => { + let component: HeaderComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [HeaderComponent] + }) + .compileComponents(); + }); + + beforeEach(() => { + fixture = TestBed.createComponent(HeaderComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/src/app/header/header.component.ts b/src/app/header/header.component.ts new file mode 100644 index 0000000..268cf2e --- /dev/null +++ b/src/app/header/header.component.ts @@ -0,0 +1,97 @@ +import { Component, Input, OnInit } from '@angular/core'; +import { Router } from '@angular/router'; +import { environment } from 'src/environments/environment'; +import { AppConfig } from '../app.config'; +import { SchemaService } from '../services/data/schema.service'; +import { TranslateService } from '@ngx-translate/core'; +import { ThemeService } from "../../app/services/theme/theme.service"; + +declare var $: any; + +@Component({ + selector: 'app-header', + templateUrl: './header.component.html', + styleUrls: ['./header.component.scss'] +}) + +export class HeaderComponent implements OnInit { + @Input() headerFor: string = 'default'; + @Input() tab: string; + logo; + languages: any; + headerSchema; + langCode: string; + lang; + indexPre; + ELOCKER_THEME: string; + siteTitle: any; + constructor( + public router: Router, private config: AppConfig, public schemaService: SchemaService, + public translate: TranslateService, private themeService: ThemeService + ) { } + + async ngOnInit() { + this.languages = JSON.parse(localStorage.getItem('languages')); + this.langCode = localStorage.getItem('setLanguage'); + this.ELOCKER_THEME = localStorage.getItem('ELOCKER_THEME'); + + if (!this.ELOCKER_THEME) { + localStorage.setItem('ELOCKER_THEME', "default"); + } + + this.logo = this.config.getEnv(localStorage.getItem('ELOCKER_THEME') + '_theme').logoPath; + this.siteTitle = this.config.getEnv('title'); + this.schemaService.getHeaderJSON().subscribe(async (HeaderSchemas) => { + var filtered = HeaderSchemas.headers.filter(obj => { + return Object.keys(obj)[0] === this.headerFor; + }); + this.headerSchema = filtered[0][this.headerFor]; + + this.headerSchema['left'][0]["activeTab"] = (this.headerSchema['left'].length == 1 || (localStorage.getItem('activeTab') == null)) ? 'active' : ''; + this.headerSchema['right'][0]["activeTab"] = (this.headerSchema['right'].length == 1 || (localStorage.getItem('activeTab') == null)) ? 'active' : ''; + + + if (localStorage.getItem('activeTab')) { + let activeT = JSON.parse(localStorage.getItem('activeTab')); + this.headerSchema[activeT.pos][activeT.i]["activeTab"] = 'active'; + + console.log(this.headerSchema); + + } + + }, (error) => { + console.error('headers.json not found in src/assets/config/ - You can refer to examples folder to create the file') + }); + } + + languageChange(lang) { + if (this.langCode != lang.target.value) { + lang = lang.target.value; + localStorage.setItem('setLanguage', lang); + window.location.reload(); + } + } + + changeTheme() { + if (this.ELOCKER_THEME == 'default') { + this.ELOCKER_THEME = "dark"; + } else { + this.ELOCKER_THEME = "default"; + } + this.themeService.setTheme(this.ELOCKER_THEME); + localStorage.setItem('ELOCKER_THEME', this.ELOCKER_THEME); + } + + onTabChange(index, pos) { + + localStorage.setItem('activeTab', JSON.stringify({ 'pos': pos, 'i': index })) + + // console.log(this.headerSchema); + + + // this.preTitle = activeTabIs.title; + + } + +} + diff --git a/src/app/home/home.component.html b/src/app/home/home.component.html new file mode 100644 index 0000000..123f4c4 --- /dev/null +++ b/src/app/home/home.component.html @@ -0,0 +1,53 @@ +
+
+ + + + + + + + + + + + + + + + + + + + + + diff --git a/src/app/home/home.component.scss b/src/app/home/home.component.scss new file mode 100644 index 0000000..3385313 --- /dev/null +++ b/src/app/home/home.component.scss @@ -0,0 +1,226 @@ +// body { +// background: $background; +// color: #585858; +// font-family: 'Exo 2', sans-serif; +// text-align: center; +// -webkit-font-smoothing: antialiased; +// -moz-osx-font-smoothing: grayscale; +// } + +a { + color: inherit; +} + +h1 { + font-weight: 300; + padding-top: 20px; + margin: 20px 0; +} + +.inspiration { + position: absolute; + bottom: 10px; + right: 10px; + font-style: oblique; +} + +.item-menu { + padding-top: 20px; + height: 250px; + box-sizing: border-box; + font-size: 20px; + text-align: center; + filter: url("#shadowed-goo"); + + .real-menu { + transform: translate3d(0, -65px, 0); + transition: transform ease-out 200ms; + } + + .menu-item { + background: #75eeac; + border-radius: 100%; + width: 80px; + height: 80px; + color: white; + text-align: center; + line-height: 80px; + transition: transform ease-out 200ms; + display: inline-block; + position: relative; + } + + .mt-20{ + margin-top: 20px; + } + + .menu-open-button { + background: #75eeac; + border-radius: 10%; + width: 120px; + height: 120px; + color: white; + text-align: center; + line-height: 120px; + transition: transform ease-out 200ms; + display: inline-block; + position: relative; + // width: 40px; + // height: 40px; + } + + .menu-open { + display: none; + } + + .plus { + width: 18px; + height: 2px; + background: white; + display: block; + position: absolute; + top: 50%; + left: 50%; + margin-left: -9px; + margin-top: -1px; + transition: transform 200ms; + + &.plus-1 { + // transform: rotate(90deg) translate3d(0, 0, 0); + } + + &.plus-2 { + // transform: rotate(0) translate3d(0, 0, 0); + } + } + + .menu-item { + &:hover { + background: white; + color: #75eeac; + } + &:nth-child(1) { + transition-duration: 10ms; + transform: translate3d(256.5px, 0, 0) scale(0.5); + } + + &:nth-child(2) { + transition-duration: 70ms; + transform: translate3d(171px, 0, 0) scale(0.5); + } + + &:nth-child(3) { + transition-duration: 130ms; + transform: translate3d(85.5px, 0, 0) scale(0.5); + } + + &:nth-child(4) { + transition-duration: 190ms; + transform: translate3d(0, 0, 0) scale(0.5); + } + + &:nth-child(5) { + transition-duration: 130ms; + transform: translate3d(-85.5px, 0, 0) scale(0.5); + } + + &:nth-child(6) { + transition-duration: 70ms; + transform: translate3d(-171px, 0, 0) scale(0.5); + } + + &:nth-child(7) { + transition-duration: 10ms; + transform: translate3d(-256.5px, 0, 0) scale(0.5); + } + + + &:after { + content: attr(data-name); + position: absolute; + font-size: 14px; + font-weight: 500; + color: #02642f; + line-height: 40px; + left: 50%; + white-space: nowrap; + transform: translate3d(-50%, 0, 0); + display: none; + } + } + + .menu-open-button { + z-index: 2; + transition-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1.275); + transition-duration: 400ms; + transform: scale(1.1, 1.1) translate3d(0, 0, 0); + cursor: pointer; + + &:hover { + transform: scale(1.2, 1.2) translate3d(0, 0, 0); + } + } + + .menu-open:checked { + + .menu-open-button { + transition-timing-function: linear; + transition-duration: 200ms; + transform: scale(1, 1) rotate(-45deg) translate3d(0, 0, 0); + } + + ~ .real-menu { + transform: translate3d(0, 5px, 0); + .menu-item { + transition-timing-function: cubic-bezier(0.935, 0, 0.34, 1.33); + transform: translate3d(0, 0, 0); + + &:nth-child(1) { + transition-duration: 400ms; + } + &:nth-child(2) { + transition-duration: 320ms; + } + + &:nth-child(3) { + transition-duration: 240ms; + } + + &:nth-child(4) { + transition-duration: 160ms; + } + + &:nth-child(5) { + transition-duration: 240ms; + } + + &:nth-child(6) { + transition-duration: 320ms; + } + + &:nth-child(7) { + transition-duration: 400ms; + } + + &:after { + display: block; + } + } + } + } +} + + .center { + margin: 0; + position: relative; + top: 50%; + left: 50%; + -ms-transform: translate(-50%, -50%); + transform: translate(-50%, -50%); + margin-top: 3%; + } + + .btn{ + font-size:large; + font-weight: bold; + border-radius: 10px; + } \ No newline at end of file diff --git a/src/app/home/home.component.spec.ts b/src/app/home/home.component.spec.ts new file mode 100644 index 0000000..2c5a172 --- /dev/null +++ b/src/app/home/home.component.spec.ts @@ -0,0 +1,25 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { HomeComponent } from './home.component'; + +describe('HomeComponent', () => { + let component: HomeComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [ HomeComponent ] + }) + .compileComponents(); + }); + + beforeEach(() => { + fixture = TestBed.createComponent(HomeComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/src/app/home/home.component.ts b/src/app/home/home.component.ts new file mode 100644 index 0000000..8f7729c --- /dev/null +++ b/src/app/home/home.component.ts @@ -0,0 +1,56 @@ +import { Component, OnInit } from '@angular/core'; +import { ActivatedRoute, Router } from '@angular/router'; +import { GeneralService } from '../services/general/general.service'; +import { AppConfig } from '../app.config'; +import { HttpClient } from '@angular/common/http'; +import { Observable, of } from 'rxjs'; +import { catchError, map } from 'rxjs/operators'; + +@Component({ + selector: 'app-home', + templateUrl: './home.component.html', + styleUrls: ['./home.component.scss'] +}) +export class HomeComponent implements OnInit { + installed: boolean = false; + checkbox: any; + myTemplate: any; + constructor(public router: Router, private config: AppConfig, private httpClient: HttpClient) { } + + ngOnInit(): void { + this.checkHtmlFile().subscribe((res) => { + if (res) { + this.myTemplate = res; + } + }, + (error) => { + var handler = document.getElementById('menu-open-handler'); + var toggleInterval = setInterval(function () { + this.checkbox = document.getElementById('menu-open'); + this.checkbox.checked = !this.checkbox.checked; + }, 4000); + + handler.onclick = function () { + clearInterval(toggleInterval); + }; + } + ); + + + } + + checkHtmlFile(): Observable { + return this.httpClient.get('/assets/config/home.html',{responseType:'text'}) + .pipe( + map((html: any) => { + // console.log('html',html); + return html; + }), + catchError(error => { + console.log(error); + return of(false); + }) + ); + } + +} diff --git a/src/app/install/install.component.html b/src/app/install/install.component.html new file mode 100644 index 0000000..417ed04 --- /dev/null +++ b/src/app/install/install.component.html @@ -0,0 +1,25 @@ + +
+
{{'INSTALLATION' | translate}}
+
+
+
+ +
+ + +
+
+ +

{{'INSTALLATION_COMPLETED' | translate}}

+
+ {{'ADD_DOWNLOADED' | translate}} config.json {{'FILE_TO' | translate}} /assets/config/{{'FOLDER_TO_COMPLETE_INITIAL_CONFIGURATION' | translate}}. +
+ {{'I_HAVE_YOU_ADDED_THE_CONFIG_FILE' | translate}}. +
+ +
+
+ +
+
diff --git a/src/app/install/install.component.scss b/src/app/install/install.component.scss new file mode 100644 index 0000000..e69de29 diff --git a/src/app/install/install.component.spec.ts b/src/app/install/install.component.spec.ts new file mode 100644 index 0000000..523fb1e --- /dev/null +++ b/src/app/install/install.component.spec.ts @@ -0,0 +1,25 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { InstallComponent } from './install.component'; + +describe('InstallComponent', () => { + let component: InstallComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [ InstallComponent ] + }) + .compileComponents(); + }); + + beforeEach(() => { + fixture = TestBed.createComponent(InstallComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/src/app/install/install.component.ts b/src/app/install/install.component.ts new file mode 100644 index 0000000..2ce8372 --- /dev/null +++ b/src/app/install/install.component.ts @@ -0,0 +1,551 @@ +import { Component, OnInit } from '@angular/core'; +import { Router } from '@angular/router'; +import { FormGroup } from '@angular/forms'; +import { FormlyFormOptions, FormlyFieldConfig } from '@ngx-formly/core'; +import { HttpClient } from '@angular/common/http'; +import { Observable, of } from 'rxjs'; +import { catchError, map } from 'rxjs/operators'; + + +@Component({ + selector: 'app-install', + templateUrl: './install.component.html', + styleUrls: ['./install.component.scss'] +}) +export class InstallComponent implements OnInit { + installed: boolean = false; + message: boolean = false; + form = new FormGroup({}); + model: any = {}; + options: FormlyFormOptions = {}; + languages = [ + { value: "en", label: 'English' }, + { value: "hi", label: 'Hindi' } + ] + fields: FormlyFieldConfig[] = [ + { + key: 'title', + type: 'input', + templateOptions: { + placeholder: 'ex: Sunbird RC', + required: true, + addonLeft: { + text: 'title:', + }, + label: 'What is your project name?', + }, + }, + { + key: 'environment', + type: 'select', + defaultValue: 'development', + templateOptions: { + label: 'Select environment', + required: true, + addonLeft: { + text: 'environment:', + }, + options: [ + { label: 'Development', value: 'development' }, + { label: 'Production', value: 'production' } + ], + }, + }, + { + key: 'appType', + type: 'select', + defaultValue: 'Attestation', + templateOptions: { + label: 'Select type of appplication', + required: true, + addonLeft: { + text: 'appType:', + }, + options: [ + { label: 'Attestation', value: 'attestation' }, + { label: 'Certification', value: 'certification' }, + { label: 'Digital Wallet', value: 'digital_wallet'} + ], + }, + }, + { + key: 'baseUrl', + type: 'input', + templateOptions: { + placeholder: 'ex: https://example.com/api/v1', + required: true, + addonLeft: { + text: 'baseUrl:', + }, + label: 'What is your base API URL?', + }, + }, + { + key: 'schemaUrl', + type: 'input', + templateOptions: { + placeholder: 'ex: https://example.com/api/docs/schema.json', + required: true, + addonLeft: { + text: 'schemaUrl:', + }, + label: 'What is your schema URL?', + }, + }, + { + key: 'keycloak', + wrappers: ['panel'], + templateOptions: { label: 'Keycloak Configurations' }, + fieldGroup: [{ + key: 'url', + type: 'input', + templateOptions: { + placeholder: 'ex: https://example.com/auth', + required: true, + type: 'text', + label: 'Authentication service configurations', + addonLeft: { + text: 'url:', + }, + }, + }, + { + key: 'realm', + type: 'input', + templateOptions: { + required: true, + type: 'text', + addonLeft: { + text: 'realm:', + }, + }, + }, + { + key: 'clientId', + type: 'input', + templateOptions: { + required: true, + type: 'text', + addonLeft: { + text: 'clientId:', + }, + }, + } + ], + }, + { + key: 'language', + type: 'select', + templateOptions: { + label: 'Select Default Language', + placeholder: 'Select Default language', + required: true, + multiple: true, + options: this.languages + + } + }, + { + key: 'configFolder', + type: 'input', + defaultValue: '/assets/config', + templateOptions: { + addonLeft: { + text: 'configFolder:', + }, + description:'Reference link : https://github.com/ref-registries/edu-core-registries/tree/main/ui-config', + required: true, + label: 'Read config files(forms.json,layouts.json,etc.) from which folder?', + }, + }, + { + key: 'default_theme', + wrappers: ['panel'], + templateOptions: { label: 'Default Theme' }, + fieldGroup: [ + { + key: 'logoPath', + type: 'input', + defaultValue: '/assets/images/default-logo.png', + templateOptions: { + addonLeft: { + text: 'logoPath:', + }, + required: true, + label: 'what is the path of logo file?', + }, + }, + { + key: 'primaryColor', + type: 'color', + defaultValue: '#000000', + templateOptions: { + addonLeft: { + text: 'Primary color:', + }, + required: true, + label: 'Select color', + }, + }, + { + key: 'secondaryColor', + type: 'color', + defaultValue: '#000000', + templateOptions: { + addonLeft: { + text: 'Secondary color:', + }, + required: true, + label: 'Select color', + }, + }, + { + key: 'bodyBackground', + type: 'color', + defaultValue: '#000000', + templateOptions: { + addonLeft: { + text: 'Body Backgroud color:', + }, + required: true, + label: 'Select color', + }, + }, + { + key: 'cardBackground', + type: 'color', + defaultValue: '#000000', + templateOptions: { + addonLeft: { + text: 'Card Backgroud color:', + }, + required: true, + label: 'Select color', + }, + }, + { + key: 'tagsBackground', + type: 'color', + defaultValue: '#000000', + templateOptions: { + addonLeft: { + text: 'Tags Backgroud color:', + }, + required: true, + label: 'Select color', + }, + }, + { + key: 'navLabelColor', + type: 'color', + defaultValue: '#000000', + templateOptions: { + addonLeft: { + text: 'Navigation Lable color:', + }, + required: true, + label: 'Select color', + }, + }, + { + key: 'headerColor', + type: 'color', + defaultValue: '#000000', + templateOptions: { + addonLeft: { + text: 'Header color:', + }, + required: true, + label: 'Select color', + }, + }, + { + key: 'primaryTextColor', + type: 'color', + defaultValue: '#000000', + templateOptions: { + addonLeft: { + text: 'Primary Text color:', + }, + required: true, + label: 'Select color', + }, + }, + { + key: 'secondaryTextColor', + type: 'color', + defaultValue: '#000000', + templateOptions: { + addonLeft: { + text: 'Secondary Text color:', + }, + required: true, + label: 'Select color', + }, + }, + + { + key: 'headerLinkColor', + type: 'color', + defaultValue: '#000000', + templateOptions: { + addonLeft: { + text: 'Header Link color:', + }, + required: true, + label: 'Select color', + }, + }, + { + key: 'linkColor', + type: 'color', + defaultValue: '#000000', + templateOptions: { + addonLeft: { + text: 'Link color:', + }, + required: true, + label: 'Select color', + }, + }, + { + key: 'secondaryBtnBgColor', + type: 'color', + defaultValue: '#000000', + templateOptions: { + addonLeft: { + text: 'Secondary Button Background color:', + }, + required: true, + label: 'Select color', + } + } + ] + }, + { + key: 'dark_theme', + wrappers: ['panel'], + templateOptions: { label: 'Dark Theme' }, + fieldGroup: [ + { + key: 'logoPath', + type: 'input', + defaultValue: '/assets/images/dark-logo.png', + templateOptions: { + addonLeft: { + text: 'logoPath:', + }, + required: true, + label: 'what is the path of logo file?', + }, + }, + { + key: 'primaryColor', + type: 'color', + defaultValue: '#000000', + templateOptions: { + addonLeft: { + text: 'Primary color:', + }, + required: true, + label: 'Select color', + }, + }, + { + key: 'secondaryColor', + type: 'color', + defaultValue: '#000000', + templateOptions: { + addonLeft: { + text: 'Secondary color:', + }, + required: true, + label: 'Select color', + }, + }, + { + key: 'bodyBackground', + type: 'color', + defaultValue: '#000000', + templateOptions: { + addonLeft: { + text: 'Body Backgroud color:', + }, + required: true, + label: 'Select color', + }, + }, + { + key: 'cardBackground', + type: 'color', + defaultValue: '#000000', + templateOptions: { + addonLeft: { + text: 'Card Backgroud color:', + }, + required: true, + label: 'Select color', + }, + }, + { + key: 'tagsBackground', + type: 'color', + defaultValue: '#000000', + templateOptions: { + addonLeft: { + text: 'Tags Backgroud color:', + }, + required: true, + label: 'Select color', + }, + }, + { + key: 'navLabelColor', + type: 'color', + defaultValue: '#000000', + templateOptions: { + addonLeft: { + text: 'Navigation Lable color:', + }, + required: true, + label: 'Select color', + }, + }, + { + key: 'headerColor', + type: 'color', + defaultValue: '#000000', + templateOptions: { + addonLeft: { + text: 'Header color:', + }, + required: true, + label: 'Select color', + }, + }, + { + key: 'primaryTextColor', + type: 'color', + defaultValue: '#000000', + templateOptions: { + addonLeft: { + text: 'Primary Text color:', + }, + required: true, + label: 'Select color', + }, + }, + { + key: 'secondaryTextColor', + type: 'color', + defaultValue: '#000000', + templateOptions: { + addonLeft: { + text: 'Secondary Text color:', + }, + required: true, + label: 'Select color', + }, + }, + { + key: 'headerLinkColor', + type: 'color', + defaultValue: '#000000', + templateOptions: { + addonLeft: { + text: 'Header Link color:', + }, + required: true, + label: 'Select color', + }, + }, + { + key: 'linkColor', + type: 'color', + defaultValue: '#000000', + templateOptions: { + addonLeft: { + text: 'Link color:', + }, + required: true, + label: 'Select color', + }, + }, + { + key: 'secondaryBtnBgColor', + type: 'color', + defaultValue: '#000000', + templateOptions: { + addonLeft: { + text: 'Secondary Button Background color:', + }, + required: true, + label: 'Select color', + } + } + ] + }, + { + key: 'footerText', + type: 'input', + templateOptions: { + defaultValue: 'Sunbird Registry and Credencials', + required: true, + addonLeft: { + text: 'footerText:', + }, + label: 'Text on footer', + }, + }, + + ]; + + constructor(public router: Router, private httpClient: HttpClient) { } + + ngOnInit(): void { + try{ + this.checkConfig().subscribe((res) => { if (res) { this.router.navigate(['']) } }, + (error) => this.installed = false); + } + catch(error) { + console.log('---------------------',error); + } + } + + checkConfig(): Observable { + return this.httpClient.get('/assets/config/config.json') + .pipe( + map(response => { + console.log('response', response) + this.installed = true; + this.router.navigate(['']) + return true; + }), + catchError(error => { + console.log('error', error) + this.installed = false; + return of(false); + }) + ); + } + async submit() { + this.formateData() + await this.saveConfig('config.json', JSON.stringify(this.model)); + this.installed = true; + } + + saveConfig(filename, data) { + var a = document.createElement('a'); + a.setAttribute('href', 'data:text/plain;charset=utf-u,' + encodeURIComponent(data)); + a.setAttribute('download', filename); + a.click() + this.message = true; + } + + formateData() { + if (this.model.baseUrl.substring(this.model.baseUrl.length - 1) == "/") { + this.model.baseUrl = this.model.baseUrl.substring(0, this.model.baseUrl.length - 1); + } + } + +} diff --git a/src/app/interfaces/httpOptions.interface.ts b/src/app/interfaces/httpOptions.interface.ts new file mode 100644 index 0000000..c645f8c --- /dev/null +++ b/src/app/interfaces/httpOptions.interface.ts @@ -0,0 +1,34 @@ +import { HttpParams, HttpHeaders } from '@angular/common/http'; +/** + * http method options + */ +export interface HttpOptions { +/** + * http header + */ + headers?: HttpHeaders | {[header: string]: string | any}; +/** + * http params + */ + params?: HttpParams | { + [param: string]: string | string[]; + }; +/** + * report Progress + */ + reportProgress?: boolean; +/** + * response Type + */ + responseType?: 'json'; +/** + * body for delete + */ + body?: any; + + /** + * if value is response , headers will be returned in api response + */ + observe?: any; + +} diff --git a/src/app/json-typings.d.ts b/src/app/json-typings.d.ts new file mode 100644 index 0000000..4efcb04 --- /dev/null +++ b/src/app/json-typings.d.ts @@ -0,0 +1,4 @@ +declare module "*.json" { + const value: any; + export default value; + } \ No newline at end of file diff --git a/src/app/layouts/doc-view/doc-view.component.css b/src/app/layouts/doc-view/doc-view.component.css new file mode 100644 index 0000000..e69de29 diff --git a/src/app/layouts/doc-view/doc-view.component.html b/src/app/layouts/doc-view/doc-view.component.html new file mode 100644 index 0000000..12797d8 --- /dev/null +++ b/src/app/layouts/doc-view/doc-view.component.html @@ -0,0 +1,49 @@ +
+
+
+

Document

+
+ +
+ +
+
+ +
+
+
+
{{item.value}}
+
+ +
+
+
+ +
Government of Sri Lanka
+
+
+ +
+
+
+ +
+
+
+
+ + + + + +
+ +
+
\ No newline at end of file diff --git a/src/app/layouts/doc-view/doc-view.component.spec.ts b/src/app/layouts/doc-view/doc-view.component.spec.ts new file mode 100644 index 0000000..9b806ea --- /dev/null +++ b/src/app/layouts/doc-view/doc-view.component.spec.ts @@ -0,0 +1,25 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { DocViewComponent } from './doc-view.component'; + +describe('DocViewComponent', () => { + let component: DocViewComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [ DocViewComponent ] + }) + .compileComponents(); + }); + + beforeEach(() => { + fixture = TestBed.createComponent(DocViewComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/src/app/layouts/doc-view/doc-view.component.ts b/src/app/layouts/doc-view/doc-view.component.ts new file mode 100644 index 0000000..517f353 --- /dev/null +++ b/src/app/layouts/doc-view/doc-view.component.ts @@ -0,0 +1,134 @@ +import { Component, OnInit } from '@angular/core'; +import { ActivatedRoute } from '@angular/router'; +import { environment } from 'src/environments/environment'; + +import { + Pipe, + PipeTransform, + OnDestroy, + WrappedValue, + ChangeDetectorRef +} from '@angular/core'; + +import { DomSanitizer, SafeUrl } from '@angular/platform-browser'; +import { GeneralService } from 'src/app/services/general/general.service'; +import { BehaviorSubject, Observable, Subscription } from 'rxjs'; +import { KeycloakService } from 'keycloak-angular'; +import { AppConfig } from 'src/app/app.config'; +import { HttpClient, HttpHeaders } from '@angular/common/http'; +import { distinctUntilChanged, filter, switchMap } from 'rxjs/operators'; + + +@Component({ + selector: 'app-doc-view', + templateUrl: './doc-view.component.html', + styleUrls: ['./doc-view.component.css'] +}) +export class DocViewComponent implements OnInit { + docUrl: string; + baseUrl = this.config.getEnv('baseUrl'); + extension; + token + public bearerToken: string | undefined = undefined; + id: any; + excludedFields: any = ['osid','id', 'type','fileUrl']; + document = []; + constructor(private route: ActivatedRoute, public generalService: GeneralService, + private keycloakService: KeycloakService, private config: AppConfig) { + this.token = this.keycloakService.getToken(); + + } + + ngOnInit(): void { + this.route.params.subscribe(async params => { + if(params.id && params.type){ + this.id = params.id; + this.generalService.getData(params.type+'/'+params.id).subscribe((res) => { + console.log('pub res', res); + if(res.name !== 'attestation-DIVOC'){ + for (const [key, value] of Object.entries(res['additionalInput'])) { + var tempObject = {} + if(key === 'fileUrl'){ + this.docUrl = this.baseUrl + '/' + value; + this.extension = this.docUrl.split('.').slice(-1)[0]; + } + if (typeof value != 'object') { + if (!this.excludedFields.includes(key)) { + tempObject['key'] = key; + tempObject['value'] = value; + tempObject['type'] = res['name']; + tempObject['osid'] = res['osid']; + if(res['logoUrl']){ + tempObject['logoUrl'] = res['logoUrl'] + } + this.document.push(tempObject); + } + } else { + if (!this.excludedFields.includes(key)) { + tempObject['key'] = key; + tempObject['value'] = value[0]; + tempObject['type'] = res['name']; + tempObject['osid'] = res['osid']; + if(res['logoUrl']){ + tempObject['logoUrl'] = res['logoUrl'] + } + this.document.push(tempObject); + } + } + + + } + } + + console.log('this.document',this.document) + }, (err) => { + // this.toastMsg.error('error', err.error.params.errmsg) + console.log('error', err) + }); + + } + + }) + } +} + + +// Using similarity from AsyncPipe to avoid having to pipe |secure|async in HTML. + +@Pipe({ + name: 'authImage' +}) +export class AuthImagePipe implements PipeTransform { + extension; + constructor( + private http: HttpClient, private route: ActivatedRoute, + private keycloakService: KeycloakService, // our service that provides us with the authorization token + ) { + + // this.route.queryParams.subscribe(async params => { + // this.extension = params.u.split('.').slice(-1)[0]; + // }) + } + + async transform(src: string,extension:string): Promise { + this.extension = extension; + const token = this.keycloakService.getToken(); + const headers = new HttpHeaders({ 'Authorization': `Bearer ${token}` }); + let imageBlob = await this.http.get(src, { headers, responseType: 'blob' }).toPromise(); + + if (this.extension == 'pdf') { + imageBlob = new Blob([imageBlob], { type: 'application/' + this.extension }) + } else { + imageBlob = new Blob([imageBlob], { type: 'image/' + this.extension }) + } + + const reader = new FileReader(); + return new Promise((resolve, reject) => { + reader.onloadend = () => resolve(reader.result as string); + reader.readAsDataURL(imageBlob); + }); + } + +} + + diff --git a/src/app/layouts/layouts.component.html b/src/app/layouts/layouts.component.html new file mode 100644 index 0000000..e611dcb --- /dev/null +++ b/src/app/layouts/layouts.component.html @@ -0,0 +1,221 @@ +
+ + +
+ +
+
+ + + +
+
+
+ {{'LOADING' | translate}} +
+
+
+ + + + +
+ +
+
+
+

{{block.title | translate}}

+ + {{'EDIT'| translate}} + + + +
+ + {{block.title | translate}} + + +
+
+
+ + + + + + + {{element[objectIndex].value}} + + + + + + + + {{'DRAFT' | translate}} + + + + + + {{'DRAFT' | translate}} + + + + + + + + + + + + + + +
+
+ {{element[objectIndex].title}}: + {{element[objectIndex].value}} +
+ +
{{element[objectIndex].title}}: + + {{element[objectIndex].value}} +
+
+
+
+
+
+
+ +
+ +
+ +
+
{{'NO_DATA_FOUND' | translate}}
+ + +
+ + + + +
+ {{element[objectIndex].value}} + + +
+ +
+ + {{element[objectIndex].title}}: + {{element[objectIndex].value}} +
+ + +
+ {{element[objectIndex].title}}: + {{element[objectIndex].value}} +
+
+
+ +
+
+
+
+ +
+ +
+ +
+
+
+ +
+
+ + + + +
+
+
+
{{item[elementIndex].title}}
+
{{item[elementIndex].value}}
+
+
+ +
{{item[elementIndex + + 1].title}}
+
{{item[elementIndex + 1].value}}
+
+
+
+
+
+
+
+
+
+
+
+
+ + + + + + + +
+
+ + + diff --git a/src/app/layouts/layouts.component.scss b/src/app/layouts/layouts.component.scss new file mode 100644 index 0000000..ef23988 --- /dev/null +++ b/src/app/layouts/layouts.component.scss @@ -0,0 +1,217 @@ +dl{ + display: flex; + flex-wrap: wrap; + flex-direction: column; + height: 4em; +} +dt{ + font-weight: 500; +} +dl,dt{ + flex-basis: 30%; + margin-bottom: 0 !important; +} +.right-xl-modal{ + &.modal{ + right: 0 !important; + // width: 70% !important; + left: inherit !important; + } + .modal-dialog{ + max-width: 680px !important; + margin: 0 auto !important; + } +} +pt-1{ + padding-top: 1rem; +} +// .right-s-modal{ +// &.modal{ +// right: 0 !important; +// // width: 70% !important; +// left: inherit !important; +// } +// .modal-dialog{ +// max-width: 480px !important; +// margin: 0 auto !important; +// } +// } + +.right-l-modal{ + &.modal{ + right: 0 !important; + width: 55% !important; + left: inherit !important; + } + .modal-dialog{ + max-width: 800px !important; + margin: 0 auto !important; + } +} +.h-100vh{ + height: 100vh; +} +.blue-shade-btn{ + background: #7f6ae245; + padding: 0.6rem; + border-radius: 5px; + margin-bottom: 0.4rem; + font-size: 0.9rem; + width: fit-content; + margin-top: 0.4rem; +} + + + +.modal.left .modal-dialog, +.modal.right .modal-dialog { + position: fixed; + margin: auto; + width: 100%; + height: 100%; + -webkit-transform: translate3d(0%, 0, 0); + -ms-transform: translate3d(0%, 0, 0); + -o-transform: translate3d(0%, 0, 0); + transform: translate3d(0%, 0, 0); +} + +.modal.left .modal-content, +.modal.right .modal-content { + height: 100%; + overflow-y: auto; +} + +.modal.left .modal-body, +.modal.right .modal-body { + padding: 15px 15px 80px; +} + +/*Left*/ +.modal.left.fade .modal-dialog{ + left: -320px; + -webkit-transition: opacity 0.3s linear, left 0.3s ease-out; + -moz-transition: opacity 0.3s linear, left 0.3s ease-out; + -o-transition: opacity 0.3s linear, left 0.3s ease-out; + transition: opacity 0.3s linear, left 0.3s ease-out; +} + +.modal.left.fade.in .modal-dialog{ + left: 0; +} + +/*Right*/ +.modal.right.fade .modal-dialog { + right: 0; + -webkit-transition: opacity 0.3s linear, right 0.3s ease-out; + -moz-transition: opacity 0.3s linear, right 0.3s ease-out; + -o-transition: opacity 0.3s linear, right 0.3s ease-out; + transition: opacity 0.3s linear, right 0.3s ease-out; +} + +.modal.right.fade.in .modal-dialog { + right: 0; +} + +/* ----- MODAL STYLE ----- */ +.modal-content { + border-radius: 0; + border: none; +} + +.modal-header { + border-bottom-color: #EEEEEE; + background-color: #FAFAFA; +} + +/* ----- v CAN BE DELETED v ----- */ +/* body { +background-color: #78909C; +} */ + +.demo { +padding-top: 60px; +padding-bottom: 110px; +} + +.btn-demo { +margin: 15px; +padding: 10px 15px; +border-radius: 0; +font-size: 16px; +background-color: #FFFFFF; +} + +.btn-demo:focus { +outline: 0; +} + +.demo-footer { +position: fixed; +bottom: 0; +width: 100%; +padding: 15px; +background-color: #212121; +text-align: center; +} + +.demo-footer > a { +text-decoration: none; +font-weight: bold; +font-size: 16px; +color: #fff; +} +.red{ + color: red; +} + +mb-2{ + margin: bottom 2px; +} +.noToBottom{ + margin-top: 10px; + padding-bottom: 40px; +} + +nav { + overflow: hidden; + // padding: 1em; + position: inherit; + top: 0px; + display: block; + width: 100%; + z-index: 1; + height: 96px; + top: 57px +} + +img { + display: inline; + width: 16px; +} + + +.noDataMsg { + background-color: var(--cardBackground) !important; + margin-top: -33px !important; + position: relative !important; +} + +.header-fixed-height{ + // height: 56px !important; + margin-bottom: 45px; +} + +.mt-0 { + margin-top: 0 ; +} + +.mt-85{ + margin-top: 85px; +} + +@media (max-width: 767.98px) { + .mt-85{ + margin-top: 125px; + } + +} \ No newline at end of file diff --git a/src/app/layouts/layouts.component.spec.ts b/src/app/layouts/layouts.component.spec.ts new file mode 100644 index 0000000..15424aa --- /dev/null +++ b/src/app/layouts/layouts.component.spec.ts @@ -0,0 +1,25 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { LayoutsComponent } from './layouts.component'; + +describe('LayoutsComponent', () => { + let component: LayoutsComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [ LayoutsComponent ] + }) + .compileComponents(); + }); + + beforeEach(() => { + fixture = TestBed.createComponent(LayoutsComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/src/app/layouts/layouts.component.ts b/src/app/layouts/layouts.component.ts new file mode 100644 index 0000000..3130b52 --- /dev/null +++ b/src/app/layouts/layouts.component.ts @@ -0,0 +1,528 @@ +import { Component, Input, OnInit, OnChanges, SimpleChanges } from '@angular/core'; +import { ActivatedRoute, Router } from '@angular/router'; +import { SchemaService } from '../services/data/schema.service'; +import { GeneralService } from '../services/general/general.service'; +import { NgbModal } from '@ng-bootstrap/ng-bootstrap'; +import { Subject } from 'rxjs'; +import { Title } from '@angular/platform-browser'; +import { TranslateService } from '@ngx-translate/core'; + +@Component({ + selector: 'app-layouts', + templateUrl: './layouts.component.html', + styleUrls: ['./layouts.component.scss'] +}) +export class LayoutsComponent implements OnInit, OnChanges { + @Input() layout; + @Input() publicData; + + @Input() identifier; + @Input() public: boolean = false; + claim: any; + responseData; + tab: string = 'profile'; + schemaloaded = false; + layoutSchema; + apiUrl: any; + model: any; + Data: string[] = []; + property: any[] = []; + currentDialog = null; + destroy = new Subject(); + isPreview: boolean = false; + name: string; + address: string; + headerName: any; + subHeadername = []; + params: any; + langKey; + titleVal; + constructor(private route: ActivatedRoute, public schemaService: SchemaService, private titleService: Title, public generalService: GeneralService, private modalService: NgbModal, + public router: Router, public translate: TranslateService) { + } + + ngOnChanges(): void { + this.Data = []; + this.ngOnInit(); + } + + ngOnInit(): void { + + this.subHeadername = []; + if (this.publicData) { + this.model = this.publicData; + this.identifier = this.publicData.osid; + } + + this.router.routeReuseStrategy.shouldReuseRoute = () => false; + this.route.params.subscribe(params => { + this.params = params; + if (params['layout'] != undefined) { + this.layout = params['layout'] + this.titleService.setTitle(params['layout'].charAt(0).toUpperCase() + params['layout'].slice(1)); + } + if (params['claim']) { + this.claim = params['claim'] + }; + if (params['tab']) { + this.tab = params['tab'] + } + localStorage.setItem('entity', this.layout); + this.layout = this.layout.toLowerCase() + }); + this.schemaService.getSchemas().subscribe(async (res) => { + this.responseData = res; + this.schemaService.getLayoutJSON().subscribe(async (LayoutSchemas) => { + var filtered = LayoutSchemas.layouts.filter(obj => { + return Object.keys(obj)[0] === this.layout; + }); + this.layoutSchema = filtered[0][this.layout]; + if (this.layoutSchema.table) { + var url = [this.layout, 'attestation', this.layoutSchema.table] + this.router.navigate([url.join('/')]) + } + if (this.layoutSchema.api) { + this.apiUrl = this.layoutSchema.api; + + if (this.publicData) { + this.Data = []; + this.addData(); + } else { + await this.getData(); + } + + } + }, (error) => { + //Layout Error callback + console.error('layouts.json not found in src/assets/config/ - You can refer to examples folder to create the file') + }); + }, + (error) => { + //Schema Error callback + console.error('Something went wrong with Schema URL or Path not found') + }); + } + + check(conStr, title) { + this.translate.get(this.langKey + '.' + conStr).subscribe(res => { + let constr = this.langKey + '.' + conStr; + if (res != constr) { + this.titleVal = res; + } else { + this.titleVal = title; + } + }); + return this.titleVal; + } + + addData() { + this.layoutSchema.blocks.forEach(block => { + this.property = []; + block['items'] = []; + var temp_object; + + if (this.layoutSchema.hasOwnProperty('langKey')) { + this.langKey = this.layoutSchema.langKey; + } + + if (block.fields.includes && block.fields.includes.length > 0) { + if (block.fields.includes == "*") { + for (var element in this.model) { + if (!Array.isArray(this.model[element])) { + if (typeof this.model[element] == 'string') { + temp_object = this.responseData['definitions'][block.definition]['properties'][element] + if (temp_object != undefined) { + + temp_object.property = element; + temp_object.title = this.check(element, temp_object.title); + temp_object['value'] = this.model[element]; + this.property.push(temp_object) + } + } + else { + for (const [key, value] of Object.entries(this.model[element])) { + if (this.responseData['definitions'][block.definition]['properties'][element]) { + if ('$ref' in this.responseData['definitions'][block.definition]['properties'][element]) { + var ref_defination = (this.responseData['definitions'][block.definition]['properties'][element]['$ref']).split('/').pop() + temp_object = this.responseData['definitions'][ref_defination]['properties'][key] + + if (temp_object != undefined && typeof value != 'object') { + + temp_object.property = key; + temp_object.title = this.check(key, temp_object.title); + temp_object['value'] = value + this.property.push(temp_object) + } + } + else { + if (this.responseData['definitions'][block.definition]['properties'][element]['properties'] != undefined) { + temp_object = this.responseData['definitions'][block.definition]['properties'][element]['properties'][key] + + if (temp_object != undefined && typeof value != 'object') { + + temp_object.property = key; + temp_object.title = this.check(key, temp_object.title); + temp_object['value'] = value + this.property.push(temp_object) + } + } + else { + temp_object = this.responseData['definitions'][block.definition]['properties'][element] + if (temp_object != undefined) { + + temp_object.property = element; + temp_object.title = this.check(element, temp_object.title); + temp_object['value'] = this.model[element] + this.property.push(temp_object) + } + } + } + } + } + } + } + else { + if (block.fields.excludes && block.fields.excludes.length > 0 && !block.fields.excludes.includes(element)) { + this.model[element].forEach(objects => { + for (const [key, value] of Object.entries(objects)) { + if (this.responseData['definitions'][block.definition]['properties'][element]) { + if ('$ref' in this.responseData['definitions'][block.definition]['properties'][element]) { + var ref_defination = (this.responseData['definitions'][block.definition]['properties'][element]['$ref']).split('/').pop() + temp_object = this.responseData['definitions'][ref_defination]['properties'][key] + if (temp_object != undefined && typeof value != 'object') { + + temp_object.property = key; + temp_object.title = this.check(key, temp_object.title); + temp_object['value'] = value; + this.property.push(temp_object); + } + } + else { + temp_object = this.responseData['definitions'][block.definition]['properties'][element]['items']['properties'][key]; + if (temp_object != undefined && typeof value != 'object') { + + temp_object.property = key; + temp_object.title = this.check(key, temp_object.title); + temp_object['value'] = value; + this.property.push(temp_object); + } + } + } + } + }); + } + } + } + } + else { + block.fields.includes.forEach(element => { + if (this.model[element] && !Array.isArray(this.model[element])) { + for (const [key, value] of Object.entries(this.model[element])) { + if (this.responseData['definitions'][block.definition]['properties'][element]) { + if ('$ref' in this.responseData['definitions'][block.definition]['properties'][element]) { + var ref_defination = (this.responseData['definitions'][block.definition]['properties'][element]['$ref']).split('/').pop() + temp_object = this.responseData['definitions'][ref_defination]['properties'][key] + if (temp_object != undefined && typeof value != 'object') { + if (element.osid) { + temp_object['osid'] = element.osid + } + if (element.osid) { + temp_object['_osState'] = element._osState; + // if(element.hasOwnProperty("_osClaimNotes")){ + // temp_object['_osClaimNotes'] = element._osClaimNotes; + // } + } + + temp_object.property = key; + temp_object.title = this.check(key, temp_object.title); + temp_object['value'] = value + this.property.push(temp_object) + } + + + } + else { + temp_object = this.responseData['definitions'][block.definition]['properties'][element]['properties'][key]; + if (temp_object != undefined && typeof value != 'object') { + if (element.osid) { + temp_object['osid'] = element.osid; + } + if (element.osid) { + temp_object['_osState'] = element._osState; + } + + temp_object.property = key; + temp_object.title = this.check(key, temp_object.title); + temp_object['value'] = value; + this.property.push(temp_object); + } + + } + } + } + } + else { + if (this.model[element]) { + // this.model[element].forEach((objects, i) => { + for (let i = 0; i < this.model[element].length; i++) { + let objects = this.model[element][i]; + var osid; + var osState; + var temp_array = []; + + + // alert(i + ' ----1--- ' + objects.osid); + + let tempName = localStorage.getItem('entity').toLowerCase() + element.charAt(0).toUpperCase() + element.slice(1); + tempName = (localStorage.getItem('entity') == 'student' || localStorage.getItem('entity') == 'Student' ) ? 'studentInstituteAttest' : tempName; + if (this.model.hasOwnProperty(tempName)) { + let objects1; + var tempObj = [] + //this.model[tempName].forEach((objects1, j) => { + for (let j = 0; j < this.model[tempName].length; j++) { + objects1 = this.model[tempName][j]; + console.log(objects.osid + ' ' + objects1.propertiesOSID[element][0]); + if (objects.osid == objects1.propertiesOSID[element][0]) { + objects1.propertiesOSID.osUpdatedAt = new Date(objects1.propertiesOSID.osUpdatedAt); + tempObj.push(objects1) + } + + } + + if (tempObj.length) { + + tempObj.sort((a, b) => (b.propertiesOSID.osUpdatedAt) - (a.propertiesOSID.osUpdatedAt)); + this.model[element][i]['_osState'] = tempObj[0]._osState; + console.log({ tempObj }); + } + + + } + + + for (const [index, [key, value]] of Object.entries(Object.entries(objects))) { + if ('$ref' in this.responseData['definitions'][block.definition]['properties'][element]) { + var ref_defination = (this.responseData['definitions'][block.definition]['properties'][element]['$ref']).split('/').pop() + temp_object = this.responseData['definitions'][ref_defination]['properties'][key] + if (temp_object != undefined && typeof value != 'object') { + if (objects.osid) { + temp_object['osid'] = objects.osid; + } + if (objects.osid) { + temp_object['_osState'] = objects._osState; + } + + temp_object.property = key; + temp_object.title = this.check(key, temp_object.title); + temp_object['value'] = value; + temp_array.push(this.pushData(temp_object)) + } + } + else { + temp_object = this.responseData['definitions'][block.definition]['properties'][element]['items']['properties'][key]; + + if (temp_object != undefined && temp_object.hasOwnProperty('title')) { + temp_object.property = key; + temp_object.title = this.check(key, temp_object.title); + } + + if (temp_object != undefined && typeof value != 'object') { + if (objects.osid) { + temp_object['osid'] = objects.osid; + } + if (objects.osid) { + temp_object['_osState'] = objects._osState; + } + + temp_object.property = key; + temp_object.title = this.check(key, temp_object.title); + temp_object['value'] = value; + temp_array.push(this.pushData(temp_object)); + } + // } + + + } + } + this.property.push(temp_array); + }; + } + } + }); + } + } + if (block.fields.excludes && block.fields.excludes.length > 0) { + block.fields.excludes.forEach(element => { + if (this.property.hasOwnProperty(element)) { + delete this.property[element]; + } + }); + } + + if (block.hasOwnProperty('propertyShowFirst') && this.property.length) { + let fieldsArray = (this.property[0].length) ? this.property[0] : this.property; + let fieldsArrayTemp = []; + + for (let i = 0; i < block.propertyShowFirst.length; i++) { + fieldsArray = fieldsArray.filter(function (obj) { + if(obj.property === block.propertyShowFirst[i]) + { + fieldsArrayTemp.push(obj); + } + return obj.property !== block.propertyShowFirst[i]; + }); + + } + + this.property = (this.property[0].length) ? [fieldsArrayTemp.concat(fieldsArray)] : fieldsArrayTemp.concat(fieldsArray); + + } + + block.items.push(this.property) + this.Data.push(block) + this.schemaloaded = true; + }); + } + + pushData(data) { + var object = {}; + for (var key in data) { + if (data.hasOwnProperty(key)) + object[key] = data[key]; + } + return object; + } + + async getData() { + var get_url; + if (this.identifier) { + get_url = this.apiUrl + '/' + this.identifier + } else { + get_url = this.apiUrl + } + await this.generalService.getData(get_url).subscribe((res) => { + if (this.identifier) { + this.model = res + } + else { + this.model = res[0]; + this.identifier = res[0].osid; + } + + this.getHeadingTitle(this.model); + + this.Data = []; + localStorage.setItem('osid', this.identifier); + this.addData() + }); + } + + includeFields(fields) { + fields.forEach(element => { + if (typeof element == "object") { + element.forEach(ref => { + this.property[ref] = this.model[element][ref] + }); + } + else { + this.property[element] = this.model[element] + } + }); + } + + removeCommonFields() { + var commonFields = ['osCreatedAt', 'osCreatedBy', 'osUpdatedAt', 'osUpdatedBy', 'osid', 'OsUpdatedBy']; + const filteredArray = this.property.filter(function (x, i) { + return commonFields.indexOf(x[i]) < 0; + }); + } + + ngOnDestroy() { + this.destroy.next(); + } + + openPreview() { + this.isPreview = true; + } + + getHeadingTitle(item) { + if (this.layoutSchema.hasOwnProperty('headerName')) { + var propertySplit = this.layoutSchema.headerName.split("."); + + let fieldValue = []; + + for (let j = 0; j < propertySplit.length; j++) { + let a = propertySplit[j]; + + if (j == 0 && item.hasOwnProperty(a)) { + fieldValue = item[a]; + } else if (fieldValue.hasOwnProperty(a)) { + + fieldValue = fieldValue[a]; + + } else if (fieldValue[0]) { + let arryItem = [] + if (fieldValue.length > 0) { + for (let i = 0; i < fieldValue.length; i++) { + // arryItem.push({ 'value': fieldValue[i][a], "status": fieldValue[i][key.attest] }); + } + + fieldValue = arryItem; + + } else { + fieldValue = fieldValue[a]; + } + + } else { + fieldValue = []; + } + } + + this.headerName = fieldValue; + this.getSubHeadername(item); + } + + } + + + + getSubHeadername(item) { + + if (this.layoutSchema.hasOwnProperty('subHeadername')) { + var propertySplit = this.layoutSchema.subHeadername.split(","); + + let fieldValue = []; + + for (let k = 0; k < propertySplit.length; k++) { + var propertyKSplit = propertySplit[k].split("."); + + for (let j = 0; j < propertyKSplit.length; j++) { + + let a = propertyKSplit[j]; + + if (j == 0 && item.hasOwnProperty(a)) { + fieldValue = item[a]; + } else if (fieldValue.hasOwnProperty(a)) { + + fieldValue = fieldValue[a]; + + } else if (fieldValue[0]) { + let arryItem = [] + if (fieldValue.length > 0) { + + fieldValue = arryItem; + + } else { + fieldValue = fieldValue[a]; + } + + } else { + fieldValue = []; + } + } + + fieldValue.length ? this.subHeadername.push(fieldValue) : []; + } + } + } +} diff --git a/src/app/layouts/modal/modal.directive.ts b/src/app/layouts/modal/modal.directive.ts new file mode 100644 index 0000000..a26edf9 --- /dev/null +++ b/src/app/layouts/modal/modal.directive.ts @@ -0,0 +1,233 @@ +import { + Directive, + OnChanges, + OnDestroy, + HostBinding, + Input, + isDevMode, + HostListener + } from '@angular/core'; + import { + QueryParamsHandling, + Router, + ActivatedRoute, + NavigationEnd, + UrlTree + } from '@angular/router'; + import { Subscription } from 'rxjs'; + import { LocationStrategy } from '@angular/common'; + @Directive({ + selector: '[panelEditLink]' + }) + export class ModalRouterEditLinkDirective { + @HostBinding('attr.target') @Input() target!: string; + @Input() queryParams!: { [k: string]: any }; + @Input() fragment!: string; + @Input() queryParamsHandling!: QueryParamsHandling; + @Input() preserveFragment!: boolean; + @Input() skipLocationChange!: boolean; + @Input() replaceUrl!: boolean; + @Input() state?: { [k: string]: any }; + private commands: any[] = []; + private subscription: Subscription; + private preserve!: boolean; + @HostBinding() href!: string; + + constructor( + private router: Router, + private route: ActivatedRoute, + private locationStrategy: LocationStrategy + ) { + this.subscription = router.events.subscribe((s: any) => { + // console.log('ssssssssss',s) + if (s instanceof NavigationEnd) { + this.updateTargetUrlAndHref(); + } + }); + } + + @Input() + set panelEditLink(commands: any[] | string) { + if (commands != null && commands !== '') { + this.commands = Array.isArray(commands) ? commands : [commands]; + } else { + this.commands = []; + } + this.commands = [{ outlets: { claim: [ 'edit', ...this.commands] } }]; + } + + @Input() + set preserveQueryParams(value: boolean) { + if (isDevMode() && console && console.warn) { + console.warn( + 'preserveQueryParams is deprecated, use queryParamsHandling instead.' + ); + } + this.preserve = value; + } + + ngOnChanges(changes: {}): any { + this.updateTargetUrlAndHref(); + } + ngOnDestroy(): any { + this.subscription.unsubscribe(); + } + + @HostListener('click', [ + '$event.button', + '$event.ctrlKey', + '$event.metaKey', + '$event.shiftKey' + ]) + onClick( + button: number, + ctrlKey: boolean, + metaKey: boolean, + shiftKey: boolean + ): boolean { + if (button !== 0 || ctrlKey || metaKey || shiftKey) { + return true; + } + + if (typeof this.target === 'string' && this.target !== '_self') { + return true; + } + + const extras = { + skipLocationChange: attrBoolValue(this.skipLocationChange), + replaceUrl: attrBoolValue(this.replaceUrl), + state: this.state + }; + this.router.navigateByUrl(this.urlTree, extras); + return false; + } + + private updateTargetUrlAndHref(): void { + this.href = this.locationStrategy.prepareExternalUrl( + this.router.serializeUrl(this.urlTree) + ); + } + + get urlTree(): UrlTree { + return this.router.createUrlTree(this.commands, { + relativeTo: this.route, + queryParams: this.queryParams, + fragment: this.fragment, + preserveQueryParams: attrBoolValue(this.preserve), + queryParamsHandling: this.queryParamsHandling, + preserveFragment: attrBoolValue(this.preserveFragment) + }); + } + } + + + + @Directive({ + selector: '[panelAddLink]' + }) + export class ModalRouterAddLinkDirective { + @HostBinding('attr.target') @Input() target!: string; + @Input() queryParams!: { [k: string]: any }; + @Input() fragment!: string; + @Input() queryParamsHandling!: QueryParamsHandling; + @Input() preserveFragment!: boolean; + @Input() skipLocationChange!: boolean; + @Input() replaceUrl!: boolean; + @Input() state?: { [k: string]: any }; + @Input() identity: string; + private commands: any[] = []; + private subscription: Subscription; + private preserve!: boolean; + @HostBinding() href!: string; + + constructor( + private router: Router, + private route: ActivatedRoute, + private locationStrategy: LocationStrategy + ) { + console.log("queryParams",this.identity) + this.subscription = router.events.subscribe((s: any) => { + // console.log('ssssssssss',s) + if (s instanceof NavigationEnd) { + this.updateTargetUrlAndHref(); + } + }); + } + + @Input() + set panelAddLink(commands: any[] | string) { + if (commands != null && commands !== '') { + this.commands = Array.isArray(commands) ? commands : [commands]; + } else { + this.commands = []; + } + this.commands = [{ outlets: { claim: [ 'add', ...this.commands] } }]; + } + + @Input() + set preserveQueryParams(value: boolean) { + if (isDevMode() && console && console.warn) { + console.warn( + 'preserveQueryParams is deprecated, use queryParamsHandling instead.' + ); + } + this.preserve = value; + } + + ngOnChanges(changes: {}): any { + this.updateTargetUrlAndHref(); + } + ngOnDestroy(): any { + this.subscription.unsubscribe(); + } + + @HostListener('click', [ + '$event.button', + '$event.ctrlKey', + '$event.metaKey', + '$event.shiftKey' + ]) + onClick( + button: number, + ctrlKey: boolean, + metaKey: boolean, + shiftKey: boolean + ): boolean { + if (button !== 0 || ctrlKey || metaKey || shiftKey) { + return true; + } + + if (typeof this.target === 'string' && this.target !== '_self') { + return true; + } + + const extras = { + skipLocationChange: attrBoolValue(this.skipLocationChange), + replaceUrl: attrBoolValue(this.replaceUrl), + state: this.state + }; + this.router.navigateByUrl(this.urlTree, extras); + return false; + } + + private updateTargetUrlAndHref(): void { + this.href = this.locationStrategy.prepareExternalUrl( + this.router.serializeUrl(this.urlTree) + ); + } + + get urlTree(): UrlTree { + return this.router.createUrlTree(this.commands, { + relativeTo: this.route, + queryParams: this.queryParams, + fragment: this.fragment, + preserveQueryParams: attrBoolValue(this.preserve), + queryParamsHandling: this.queryParamsHandling, + preserveFragment: attrBoolValue(this.preserveFragment) + }); + } + } + + function attrBoolValue(s: any): boolean { + return s === '' || !!s; + } \ No newline at end of file diff --git a/src/app/layouts/modal/modal.ts b/src/app/layouts/modal/modal.ts new file mode 100644 index 0000000..151f22a --- /dev/null +++ b/src/app/layouts/modal/modal.ts @@ -0,0 +1,41 @@ +import { + OnInit, + AfterViewInit, + OnDestroy, + Renderer2, + RendererFactory2, + Component + } from "@angular/core"; + @Component({ + template: '' + }) + export abstract class ModalPanel implements OnInit, AfterViewInit, OnDestroy { + show = false; + private renderer: Renderer2; + constructor(private renderFactory: RendererFactory2) { + this.renderer = this.renderFactory.createRenderer(null, null); + } + + ngOnInit() { + this.renderer.addClass(this.body, "modal-open"); + this.onInit(); + } + + ngOnDestroy(): void { + this.renderer.removeClass(this.body, "modal-open"); + this.onDestroy(); + } + + ngAfterViewInit(): void { + setTimeout(() => (this.show = true), 100); + } + + private get body() { + return document.getElementsByTagName("body")[0]; + } + + onInit() {} + + onDestroy() {} + } + \ No newline at end of file diff --git a/src/app/layouts/modal/panels/add-panel/add-panel.component.css b/src/app/layouts/modal/panels/add-panel/add-panel.component.css new file mode 100644 index 0000000..e69de29 diff --git a/src/app/layouts/modal/panels/add-panel/add-panel.component.html b/src/app/layouts/modal/panels/add-panel/add-panel.component.html new file mode 100644 index 0000000..30aa64e --- /dev/null +++ b/src/app/layouts/modal/panels/add-panel/add-panel.component.html @@ -0,0 +1,13 @@ + + + diff --git a/src/app/layouts/modal/panels/add-panel/add-panel.component.spec.ts b/src/app/layouts/modal/panels/add-panel/add-panel.component.spec.ts new file mode 100644 index 0000000..63638f7 --- /dev/null +++ b/src/app/layouts/modal/panels/add-panel/add-panel.component.spec.ts @@ -0,0 +1,25 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { AddPanelComponent } from './add-panel.component'; + +describe('AddPanelComponent', () => { + let component: AddPanelComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [ AddPanelComponent ] + }) + .compileComponents(); + }); + + beforeEach(() => { + fixture = TestBed.createComponent(AddPanelComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/src/app/layouts/modal/panels/add-panel/add-panel.component.ts b/src/app/layouts/modal/panels/add-panel/add-panel.component.ts new file mode 100644 index 0000000..faa2bac --- /dev/null +++ b/src/app/layouts/modal/panels/add-panel/add-panel.component.ts @@ -0,0 +1,34 @@ +import { Component, OnInit } from '@angular/core'; +import { PanelsComponent } from '../panels.component'; +import { Location } from '@angular/common' +import { ActivatedRoute } from '@angular/router'; + +@Component({ + selector: 'app-add-panel', + templateUrl: './add-panel.component.html', + styleUrls: ['./add-panel.component.css'] +}) +export class AddPanelComponent implements OnInit { + form: any; + identifier: string; + constructor(private panel: PanelsComponent, private location: Location, private route: ActivatedRoute) { } + + ngOnInit() { + this.route.params.subscribe(params => { + console.log('params',params) + this.form = params['form'] + }); + if(localStorage.getItem('entity-osid')){ + this.identifier = localStorage.getItem('entity-osid') + } + else{ + console.log("Not Authorized") + } + + } + + close() { + this.location.back() + this.panel.close(); + } +} diff --git a/src/app/layouts/modal/panels/edit-panel/edit-panel.component.html b/src/app/layouts/modal/panels/edit-panel/edit-panel.component.html new file mode 100644 index 0000000..8072933 --- /dev/null +++ b/src/app/layouts/modal/panels/edit-panel/edit-panel.component.html @@ -0,0 +1,12 @@ + + diff --git a/src/app/layouts/modal/panels/edit-panel/edit-panel.component.scss b/src/app/layouts/modal/panels/edit-panel/edit-panel.component.scss new file mode 100644 index 0000000..e69de29 diff --git a/src/app/layouts/modal/panels/edit-panel/edit-panel.component.ts b/src/app/layouts/modal/panels/edit-panel/edit-panel.component.ts new file mode 100644 index 0000000..6c6d6dd --- /dev/null +++ b/src/app/layouts/modal/panels/edit-panel/edit-panel.component.ts @@ -0,0 +1,35 @@ +import { Component, OnInit } from '@angular/core'; +import { PanelsComponent } from '../panels.component'; +import { Location } from '@angular/common' +import { ActivatedRoute } from '@angular/router'; + +@Component({ + selector: 'app-edit-panel', + templateUrl: './edit-panel.component.html', + styleUrls: ['./edit-panel.component.scss'] +}) +export class EditPanelComponent implements OnInit { + form: any; + identifier: string; + + constructor(private panel: PanelsComponent, private location: Location, private route: ActivatedRoute) { } + + ngOnInit() { + this.route.params.subscribe(params => { + this.form = params['form'].split('/', 1)[0]; + this.identifier = params['form'].split('/', 1)[1]; + }); + if(localStorage.getItem('entity-osid')){ + this.identifier = localStorage.getItem('entity-osid') + } + else{ + console.log("Not Authorized") + } + + } + + close() { + this.location.back() + this.panel.close(); + } +} diff --git a/src/app/layouts/modal/panels/panel.ts b/src/app/layouts/modal/panels/panel.ts new file mode 100644 index 0000000..a2eb665 --- /dev/null +++ b/src/app/layouts/modal/panels/panel.ts @@ -0,0 +1,40 @@ +import { + OnInit, + AfterViewInit, + OnDestroy, + Renderer2, + RendererFactory2, + Component +} from "@angular/core"; +@Component({ + template: '' +}) +export abstract class Panel implements OnInit, AfterViewInit, OnDestroy { + show = false; + private renderer: Renderer2; + constructor(private renderFactory: RendererFactory2) { + this.renderer = this.renderFactory.createRenderer(null, null); + } + + ngOnInit() { + this.renderer.addClass(this.body, "modal-open"); + this.onInit(); + } + + ngOnDestroy(): void { + this.renderer.removeClass(this.body, "modal-open"); + this.onDestroy(); + } + + ngAfterViewInit(): void { + setTimeout(() => (this.show = true), 100); + } + + private get body() { + return document.getElementsByTagName("body")[0]; + } + + onInit() {} + + onDestroy() {} +} diff --git a/src/app/layouts/modal/panels/panels.component.css b/src/app/layouts/modal/panels/panels.component.css new file mode 100644 index 0000000..e69de29 diff --git a/src/app/layouts/modal/panels/panels.component.html b/src/app/layouts/modal/panels/panels.component.html new file mode 100644 index 0000000..8bd3d01 --- /dev/null +++ b/src/app/layouts/modal/panels/panels.component.html @@ -0,0 +1,10 @@ + + \ No newline at end of file diff --git a/src/app/layouts/modal/panels/panels.component.ts b/src/app/layouts/modal/panels/panels.component.ts new file mode 100644 index 0000000..d462194 --- /dev/null +++ b/src/app/layouts/modal/panels/panels.component.ts @@ -0,0 +1,28 @@ +import { + Component, + OnInit, + AfterViewInit, + OnDestroy, + RendererFactory2, + Renderer2 +} from '@angular/core'; +import { Router, RouterOutlet } from '@angular/router'; +import { Panel} from './panel'; + +@Component({ + selector: 'app-panels', + templateUrl: './panels.component.html', + styleUrls: ['./panels.component.css'] +}) +export class PanelsComponent extends Panel { + + constructor(private router: Router, renderFactory: RendererFactory2) { + super(renderFactory); + } + + + close() { + this.show = false; + setTimeout(() => this.router.navigate([{ outlets: { claim: null } }]), 100); + } +} \ No newline at end of file diff --git a/src/app/multilingual.init.ts b/src/app/multilingual.init.ts new file mode 100644 index 0000000..8540a1c --- /dev/null +++ b/src/app/multilingual.init.ts @@ -0,0 +1,42 @@ +import { catchError } from 'rxjs/operators'; +import { forkJoin, of } from 'rxjs'; + +import { TranslateService } from '@ngx-translate/core'; +import { HttpClient } from '@angular/common/http'; + +export function initLang(http: HttpClient, translate: TranslateService) { + + return () => { + + + const defaultSetLanguage = 'en'; + const localUrl = '/assets/i18n/local'; + const globalUrl = '/assets/i18n/global'; + + const sufix = '.json'; + const local = '-local'; + const global = '-global'; + + const storageLocale = localStorage.getItem('setLanguage'); + const setLanguage = storageLocale || defaultSetLanguage; + + forkJoin([ + http.get(`${localUrl}/${setLanguage}${local}${sufix}`).pipe( + catchError(() => of(null)) + ), + http.get(`${globalUrl}/${setLanguage}${global}${sufix}`).pipe( + catchError(() => of(null)) + ) + ]).subscribe((response: any[]) => { + const devKeys = response[0]; + const translatedKeys = response[1]; + + translate.setTranslation(defaultSetLanguage, devKeys || {}); + translate.setTranslation(setLanguage, translatedKeys || {}, true); + + translate.setDefaultLang(defaultSetLanguage); + translate.use(setLanguage); + + }); + }; +} \ No newline at end of file diff --git a/src/app/pages/pages.component.html b/src/app/pages/pages.component.html new file mode 100644 index 0000000..5489b9d --- /dev/null +++ b/src/app/pages/pages.component.html @@ -0,0 +1,34 @@ +
+
+ +
+
+
+ {{'LOADING'| translate}}| translate}}... +
+
+
+ + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/app/pages/pages.component.scss b/src/app/pages/pages.component.scss new file mode 100644 index 0000000..66f674d --- /dev/null +++ b/src/app/pages/pages.component.scss @@ -0,0 +1,252 @@ +.item-menu { + padding-top: 20px; + height: 250px; + box-sizing: border-box; + font-size: 20px; + text-align: center; + filter: url("#shadowed-goo"); + .real-menu { + transform: translate3d(0, -65px, 0); + transition: transform ease-out 200ms; + } + .menu-item { + background: #75eeac; + border-radius: 100%; + width: 80px; + height: 80px; + color: white; + text-align: center; + line-height: 80px; + transition: transform ease-out 200ms; + display: inline-block; + position: relative; + } + .mt-20 { + margin-top: 20px; + } + .menu-open-button { + background: #75eeac; + border-radius: 10%; + width: 120px; + height: 120px; + color: white; + text-align: center; + line-height: 120px; + transition: transform ease-out 200ms; + display: inline-block; + position: relative; + // width: 40px; + // height: 40px; + } + .menu-open { + display: none; + } + .plus { + width: 18px; + height: 2px; + background: white; + display: block; + position: absolute; + top: 50%; + left: 50%; + margin-left: -9px; + margin-top: -1px; + transition: transform 200ms; + &.plus-1 { + // transform: rotate(90deg) translate3d(0, 0, 0); + } + &.plus-2 { + // transform: rotate(0) translate3d(0, 0, 0); + } + } + .menu-item { + &:hover { + background: white; + color: #75eeac; + } + &:nth-child(1) { + transition-duration: 10ms; + transform: translate3d(256.5px, 0, 0) scale(0.5); + } + &:nth-child(2) { + transition-duration: 70ms; + transform: translate3d(171px, 0, 0) scale(0.5); + } + &:nth-child(3) { + transition-duration: 130ms; + transform: translate3d(85.5px, 0, 0) scale(0.5); + } + &:nth-child(4) { + transition-duration: 190ms; + transform: translate3d(0, 0, 0) scale(0.5); + } + &:nth-child(5) { + transition-duration: 130ms; + transform: translate3d(-85.5px, 0, 0) scale(0.5); + } + &:nth-child(6) { + transition-duration: 70ms; + transform: translate3d(-171px, 0, 0) scale(0.5); + } + &:nth-child(7) { + transition-duration: 10ms; + transform: translate3d(-256.5px, 0, 0) scale(0.5); + } + &:after { + content: attr(data-name); + position: absolute; + font-size: 14px; + font-weight: 500; + color: #02642f; + line-height: 40px; + left: 50%; + white-space: nowrap; + transform: translate3d(-50%, 0, 0); + display: none; + } + } + .menu-open-button { + z-index: 2; + transition-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1.275); + transition-duration: 400ms; + transform: scale(1.1, 1.1) translate3d(0, 0, 0); + cursor: pointer; + &:hover { + transform: scale(1.2, 1.2) translate3d(0, 0, 0); + } + } + .menu-open:checked { + +.menu-open-button { + transition-timing-function: linear; + transition-duration: 200ms; + transform: scale(1, 1) rotate(-45deg) translate3d(0, 0, 0); + } + ~.real-menu { + transform: translate3d(0, 5px, 0); + .menu-item { + transition-timing-function: cubic-bezier(0.935, 0, 0.34, 1.33); + transform: translate3d(0, 0, 0); + &:nth-child(1) { + transition-duration: 400ms; + } + &:nth-child(2) { + transition-duration: 320ms; + } + &:nth-child(3) { + transition-duration: 240ms; + } + &:nth-child(4) { + transition-duration: 160ms; + } + &:nth-child(5) { + transition-duration: 240ms; + } + &:nth-child(6) { + transition-duration: 320ms; + } + &:nth-child(7) { + transition-duration: 400ms; + } + &:after { + display: block; + } + } + } + } +} + +// faq +.accordion { + .accordion-item { + border-bottom: 1px solid gray; + button[aria-expanded='true'] { + border-bottom: 1px solid blue; + } + } + button { + position: relative; + display: block; + text-align: left; + width: 100%; + padding: 1em 0; + color: #7288a2; + font-size: 1.15rem; + font-weight: 400; + border: none; + background: none; + outline: none; + &:hover, + &:focus { + cursor: pointer; + color: blue; + &::after { + cursor: pointer; + color: blue; + border: 1px solid blue; + } + } + .accordion-title { + padding: 1em 1.5em 1em 0; + } + .icon { + display: inline-block; + position: absolute; + top: 18px; + right: 0; + width: 22px; + height: 22px; + border: 1px solid; + border-radius: 22px; + &::before { + display: block; + position: absolute; + content: ''; + top: 9px; + left: 5px; + width: 10px; + height: 2px; + background: currentColor; + } + &::after { + display: block; + position: absolute; + content: ''; + top: 5px; + left: 9px; + width: 2px; + height: 10px; + background: currentColor; + } + } + } + button[aria-expanded='true'] { + color: blue; + .icon { + &::after { + width: 0; + } + } + +.accordion-content { + opacity: 1; + max-height: 9em; + transition: all 200ms linear; + will-change: opacity, max-height; + } + } + .accordion-content { + opacity: 0; + max-height: 0; + overflow: hidden; + transition: opacity 200ms linear, max-height 200ms linear; + will-change: opacity, max-height; + p { + font-size: 1rem; + font-weight: 300; + margin: 2em 0; + } + } +} + +a { + color: #ffff !important; +} \ No newline at end of file diff --git a/src/app/pages/pages.component.spec.ts b/src/app/pages/pages.component.spec.ts new file mode 100644 index 0000000..ba482dc --- /dev/null +++ b/src/app/pages/pages.component.spec.ts @@ -0,0 +1,25 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { PagesComponent } from './pages.component'; + +describe('PagesComponent', () => { + let component: PagesComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [ PagesComponent ] + }) + .compileComponents(); + }); + + beforeEach(() => { + fixture = TestBed.createComponent(PagesComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/src/app/pages/pages.component.ts b/src/app/pages/pages.component.ts new file mode 100644 index 0000000..cccd407 --- /dev/null +++ b/src/app/pages/pages.component.ts @@ -0,0 +1,83 @@ +import { Component, OnInit } from '@angular/core'; +import { ActivatedRoute, Router } from '@angular/router'; +import { Observable, of } from 'rxjs'; +import { catchError, map } from 'rxjs/operators'; +import { SchemaService } from '../services/data/schema.service'; +import { HttpClient } from '@angular/common/http'; + +@Component({ + selector: 'app-pages', + templateUrl: './pages.component.html', + styleUrls: ['./pages.component.scss'] +}) +export class PagesComponent implements OnInit { + page: any; + pageSchema: any; + myTemplate: any; + notFound: any; + title: any; + + constructor(private route: ActivatedRoute,public router: Router, public schemaService: SchemaService,private httpClient: HttpClient) { } + + ngOnInit(): void { + this.route.params.subscribe(params => { + if (params['page'] != undefined) { + this.page = params['page']; + } + }); + + this.schemaService.getPageJSON().subscribe((PageSchemas) => { + try{ + var filtered = PageSchemas.pages.filter(obj => { + return Object.keys(obj)[0] === this.page + }) + this.pageSchema = filtered[0][this.page] + console.log(this.pageSchema) + this.title = this.pageSchema.title; + this.checkHtmlFile(this.pageSchema.path).subscribe((res) => { + if (res) { + this.myTemplate = res; + }else{ + this.notFound = true; + } + }, + (error) => { + this.notFound = true; + var handler = document.getElementById('menu-open-handler'); + var toggleInterval = setInterval(function () { + this.checkbox = document.getElementById('menu-open'); + this.checkbox.checked = !this.checkbox.checked; + }, 4000); + + handler.onclick = function () { + clearInterval(toggleInterval); + }; + } + ); + } + catch (e) { + this.notFound = true; + } + }) + } + + checkHtmlFile(path): Observable { + return this.httpClient.get(path,{responseType:'text'}) + .pipe( + map((html: any) => { + // console.log('html',html); + return html; + }), + catchError(error => { + console.log(error); + this.notFound = true; + return of(false); + }) + ); + } + + close(){ + this.router.navigate(['']); + } + +} diff --git a/src/app/safe-html.pipe.spec.ts b/src/app/safe-html.pipe.spec.ts new file mode 100644 index 0000000..a1904fc --- /dev/null +++ b/src/app/safe-html.pipe.spec.ts @@ -0,0 +1,8 @@ +import { SafeHtmlPipe } from './safe-html.pipe'; + +describe('SafeHtmlPipe', () => { + it('create an instance', () => { + const pipe = new SafeHtmlPipe(); + expect(pipe).toBeTruthy(); + }); +}); diff --git a/src/app/safe-html.pipe.ts b/src/app/safe-html.pipe.ts new file mode 100644 index 0000000..2c3f388 --- /dev/null +++ b/src/app/safe-html.pipe.ts @@ -0,0 +1,19 @@ +import { Pipe, PipeTransform } from '@angular/core'; +import { DomSanitizer, SafeHtml, SafeStyle, SafeScript, SafeUrl, SafeResourceUrl } from '@angular/platform-browser'; + +@Pipe({ + name: 'safeHtml' +}) +export class SafeHtmlPipe implements PipeTransform { + constructor(protected sanitizer: DomSanitizer) {} + public transform(value: any, type: string): SafeHtml | SafeStyle | SafeScript | SafeUrl | SafeResourceUrl { + switch (type) { + case 'html': return (value != undefined)? this.sanitizer.bypassSecurityTrustHtml(value) : ''; + case 'style': return this.sanitizer.bypassSecurityTrustStyle(value); + case 'script': return this.sanitizer.bypassSecurityTrustScript(value); + case 'url': return this.sanitizer.bypassSecurityTrustUrl(value); + case 'resourceUrl': return this.sanitizer.bypassSecurityTrustResourceUrl(value); + } + } + +} diff --git a/src/app/services/admin-form.service.ts b/src/app/services/admin-form.service.ts new file mode 100644 index 0000000..2ad6abb --- /dev/null +++ b/src/app/services/admin-form.service.ts @@ -0,0 +1,27 @@ +import { Injectable } from '@angular/core'; +import { HttpClient, HttpResponse } from '@angular/common/http'; +import { Observable } from 'rxjs'; + + +@Injectable({ + providedIn: 'root' +}) +export class AdminFormService { + + constructor( + private httpClient: HttpClient + ) { + } + + /** + * For get event list + */ + getSchema(url) { + return this.httpClient.get(url, {responseType: 'json'}); + } + + getHeroes(url): Observable { + return this.httpClient.get(url) + } + +} diff --git a/src/app/services/data/data-request.service.spec.ts b/src/app/services/data/data-request.service.spec.ts new file mode 100644 index 0000000..dbf4df1 --- /dev/null +++ b/src/app/services/data/data-request.service.spec.ts @@ -0,0 +1,16 @@ +import { TestBed } from '@angular/core/testing'; + +import { DataService } from './data-request.service'; + +describe('DataService', () => { + let service: DataService; + + beforeEach(() => { + TestBed.configureTestingModule({}); + service = TestBed.inject(DataService); + }); + + it('should be created', () => { + expect(service).toBeTruthy(); + }); +}); diff --git a/src/app/services/data/data-request.service.ts b/src/app/services/data/data-request.service.ts new file mode 100644 index 0000000..b2efe34 --- /dev/null +++ b/src/app/services/data/data-request.service.ts @@ -0,0 +1,166 @@ +import { Injectable } from '@angular/core'; +import { HttpClient, HttpResponse } from '@angular/common/http'; +import { of as observableOf, throwError as observableThrowError, Observable, Subscriber } from 'rxjs'; +import { HttpOptions } from '../../interfaces/httpOptions.interface'; +import { mergeMap } from 'rxjs/operators'; +import * as _ from 'lodash-es'; +import { environment} from '../../../environments/environment'; +import { KeycloakService } from 'keycloak-angular'; + + +@Injectable({ + providedIn: 'root' +}) +export class DataService { +/** + * Contains base Url for api end points + */ + baseUrl: string; + token : any; + isLoogedIn; + constructor( + private http: HttpClient, + public keycloak: KeycloakService) { + this.token = localStorage.getItem('token'); + } + +/** + * for preparing headers + */ + private getHeader(headers?: HttpOptions['headers']): HttpOptions['headers'] { + + // const default_headers = { + // Accept: 'application/json', + // Authorization: 'Bearer eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICIwWVVYSmtQRWVJajhpTjE3TW5DSm1kaU1Eby1rdDl6dXNPMVZCaUJZWnpVIn0.eyJleHAiOjE2NDA2ODU3NTIsImlhdCI6MTYyMzQwNTc1MiwianRpIjoiOWFkNGNhZDgtN2Y3NS00MWJiLWI0NzUtYTM4ODlmZWViOTU2IiwiaXNzIjoiaHR0cDovL25kZWFyLnhpdi5pbi9hdXRoL3JlYWxtcy9uZGVhciIsImF1ZCI6ImFjY291bnQiLCJzdWIiOiI5NTZhZDAxMS1kNjg5LTQ4YTYtYjExNS05YTQ0Y2FkMzZlOTciLCJ0eXAiOiJCZWFyZXIiLCJhenAiOiJyZWdpc3RyeS1mcm9udGVuZCIsInNlc3Npb25fc3RhdGUiOiI5MDJjNzliZC1hN2NjLTQwYzktYjk2Zi03NjE4YmRjZmJhNTEiLCJhY3IiOiIxIiwiYWxsb3dlZC1vcmlnaW5zIjpbImh0dHBzOi8vbG9jYWxob3N0OjQyMDIiLCJodHRwOi8vbG9jYWxob3N0OjQyMDIiLCJodHRwczovL2xvY2FsaG9zdDo0MjAwIiwiaHR0cDovL2xvY2FsaG9zdDo0MjAwIl0sInJlYWxtX2FjY2VzcyI6eyJyb2xlcyI6WyJvZmZsaW5lX2FjY2VzcyIsInVtYV9hdXRob3JpemF0aW9uIl19LCJyZXNvdXJjZV9hY2Nlc3MiOnsiYWNjb3VudCI6eyJyb2xlcyI6WyJtYW5hZ2UtYWNjb3VudCIsIm1hbmFnZS1hY2NvdW50LWxpbmtzIiwidmlldy1wcm9maWxlIl19fSwic2NvcGUiOiJwcm9maWxlIGVtYWlsIiwiZW1haWxfdmVyaWZpZWQiOmZhbHNlLCJwcmVmZXJyZWRfdXNlcm5hbWUiOiJuZXd1c2VyMTMiLCJlbnRpdHkiOlsiU3R1ZGVudCJdfQ.IFZzCRNhsZb1-j6tl20Ai6Qn7_sWCJsMh-0EvlU6fMnhYz-s2BjXYT2uNH1vtpKD333jbGSuIHkQmgvi8sABZWbfMK2XEQbIJYArhHZ4awJG3syqo2vdCsFCQlVYySB1wqQKV5IwKW0a66LXy1fhMZS9zUhSzu1Nix-Odm-2tMZoI5sa8YbbTIi1HJFM5Mg886lzDXwYBjHxDALLq7yG1LtJsnfPhKAsnezFxrW6Bblm00KYf0aOLdpSRCekmpQxshLxbL6RD3EZ0I2Yyz_-3hhxP8DAFPel9FhxyDnAzmZ51ePSVulxVEXAjbdUc8gzDzZPJ0DmwALDnj0rb0LiiQ', + // }; + + this.keycloak.isLoggedIn().then((res)=>{ + console.log(res); + this.isLoogedIn = res; + }) + + if(this.isLoogedIn){ + // alert(this.keycloak.isLoggedIn); + let default_headers = { + Accept: 'application/json', + Authorization: 'Bearer ' + this.token + }; + + return default_headers; + + }else + { + let default_headers = { + Accept: 'application/json' + }; + + return default_headers; + + } + + + } + +/** + * for making post api calls + * @param RequestParam param + */ + post(requestParam): Observable { + const httpOptions: HttpOptions = { + headers: requestParam.header ? this.getHeader(requestParam.header) : this.getHeader(), + params: requestParam.param + }; + + return this.http.post(requestParam.url, requestParam.data, httpOptions).pipe( + mergeMap((data: any) => { + if (data.responseCode && data.responseCode !== 'OK') { + return observableThrowError(data); + } + return observableOf(data); + })); + } + + +/** + * for making get api calls + * + * @param requestParam param + */ + get(requestParam): Observable { + const httpOptions: HttpOptions = { + headers: requestParam.header ? requestParam.header : this.getHeader(), + params: requestParam.param + }; + + return this.http.get(requestParam.url, httpOptions).pipe( + mergeMap((data: any) => { + + return observableOf(data); + })); + + } + + getDocument(url: string): Observable { + return new Observable((observer: Subscriber) => { + let objectUrl: string = null; + + this.http + .get(url, { + headers: this.getHeader(), + responseType: 'blob' + }) + .subscribe(m => { + objectUrl = URL.createObjectURL(m); + observer.next(objectUrl); + }); + + return () => { + if (objectUrl) { + URL.revokeObjectURL(objectUrl); + objectUrl = null; + } + }; + }); +} + + +// /** +// * for making post api calls +// * @param RequestParam param +// */ +// put(requestParam): Observable { +// const httpOptions: HttpOptions = { +// headers: requestParam.header ? this.getHeader(requestParam.header) : this.getHeader(), +// params: requestParam.param +// }; +// return this.http.put(requestParam.url, requestParam.data, httpOptions).pipe( +// mergeMap((data: any) => { +// // if (data.responseCode !== 'OK') { +// // return observableThrowError(data); +// // } +// return observableOf(data); +// })); +// } + + +/** +* for making post api calls +* @param RequestParam param +*/ + put(requestParam): Observable { + const httpOptions: HttpOptions = { + headers: requestParam.header ? this.getHeader(requestParam.header) : this.getHeader(), + params: requestParam.param + }; + return this.http.put(requestParam.url, requestParam.data, httpOptions).pipe( + mergeMap((data: any) => { + if (data.responseCode !== 'OK') { + return observableThrowError(data); + } + return observableOf(data); + })); + } + +} + + diff --git a/src/app/services/data/schema.service.spec.ts b/src/app/services/data/schema.service.spec.ts new file mode 100644 index 0000000..f1a319d --- /dev/null +++ b/src/app/services/data/schema.service.spec.ts @@ -0,0 +1,16 @@ +import { TestBed } from '@angular/core/testing'; + +import { SchemaService } from './schema.service'; + +describe('SchemaService', () => { + let service: SchemaService; + + beforeEach(() => { + TestBed.configureTestingModule({}); + service = TestBed.inject(SchemaService); + }); + + it('should be created', () => { + expect(service).toBeTruthy(); + }); +}); diff --git a/src/app/services/data/schema.service.ts b/src/app/services/data/schema.service.ts new file mode 100644 index 0000000..b3ea381 --- /dev/null +++ b/src/app/services/data/schema.service.ts @@ -0,0 +1,88 @@ +import { Injectable } from '@angular/core'; +import { AppConfig } from 'src/app/app.config'; +import { environment } from 'src/environments/environment'; +import { DataService } from './data-request.service'; + +@Injectable({ + providedIn: 'root' +}) +export class SchemaService { + + schemaUrl = this.config.getEnv('schemaUrl'); + configFolder = this.config.getEnv('configFolder'); + + constructor(public dataService: DataService,private config: AppConfig) { + } + + getSchemas() { + let url = `${this.schemaUrl}`; + const req = { + url: url + }; + + return this.dataService.get(req); + } + + getHeaderJSON() { + let url = `.${this.configFolder}/headers.json`; + url.replace('//', '/'); + const req = { + url: url + }; + + return this.dataService.get(req); + } + + getFormJSON() { + let url = `.${this.configFolder}/forms.json`; + url.replace('//', '/'); + const req = { + url: url + }; + + return this.dataService.get(req); + } + + getLayoutJSON() { + let url = `.${this.configFolder}/layouts.json`; + url.replace('//', '/'); + const req = { + url: url + }; + + return this.dataService.get(req); + } + + getTableJSON() { + let url = `.${this.configFolder}/tables.json`; + url.replace('//', '/'); + const req = { + url: url + }; + + return this.dataService.get(req); + } + + getSearchJSON() { + let url = `.${this.configFolder}/search.json`; + url.replace('//', '/'); + const req = { + url: url + }; + + return this.dataService.get(req); + } + + getPageJSON() { + let url = `.${this.configFolder}/pages.json`; + url.replace('//', '/'); + const req = { + url: url + }; + + return this.dataService.get(req); + } + + +} + diff --git a/src/app/services/general/general.service.spec.ts b/src/app/services/general/general.service.spec.ts new file mode 100644 index 0000000..abc7d9f --- /dev/null +++ b/src/app/services/general/general.service.spec.ts @@ -0,0 +1,16 @@ +import { TestBed } from '@angular/core/testing'; + +import { GeneralService } from './general.service'; + +describe('GeneralService', () => { + let service: GeneralService; + + beforeEach(() => { + TestBed.configureTestingModule({}); + service = TestBed.inject(GeneralService); + }); + + it('should be created', () => { + expect(service).toBeTruthy(); + }); +}); diff --git a/src/app/services/general/general.service.ts b/src/app/services/general/general.service.ts new file mode 100644 index 0000000..423e941 --- /dev/null +++ b/src/app/services/general/general.service.ts @@ -0,0 +1,159 @@ +import { Injectable } from '@angular/core'; +import { DataService } from '../data/data-request.service'; +import { environment } from '../../../environments/environment'; +import { HttpClient, HttpHeaders } from '@angular/common/http'; +import { Observable, Subscriber } from 'rxjs'; +import { AppConfig } from 'src/app/app.config'; +import { TranslateService } from '@ngx-translate/core'; +import { map } from 'rxjs/operators'; + + +@Injectable({ + providedIn: 'root' +}) +export class GeneralService { + baseUrl = this.config.getEnv('baseUrl'); + translatedString: string; + constructor(public dataService: DataService, + private http: HttpClient, private config: AppConfig, public translate: TranslateService) { + } + + postData(apiUrl, data) { + var url; + if (apiUrl.indexOf('http') > -1) { + url = apiUrl + } else { + if (apiUrl.charAt(0) == '/') { + url = `${this.baseUrl}${apiUrl}` + } + else { + url = `${this.baseUrl}/${apiUrl}`; + } + } + + const req = { + url: url, + data: data + }; + + return this.dataService.post(req); + } + + getDocument(url: string): Observable { + return this.dataService.getDocument(url); + } + + + getData(apiUrl, outside: boolean = false) { + var url; + if (outside) { + url = apiUrl; + } + else { + url = `${this.baseUrl}/${apiUrl}`; + } + url.replace('//', '/'); + const req = { + url: url + }; + return this.dataService.get(req); + } + + getPrefillData(apiUrl) { + var url = apiUrl; + let headers = new HttpHeaders(); + url.replace('//', '/'); + const req = { + url: url, + headers: headers + }; + + return this.dataService.get(req); + } + + postPrefillData(apiUrl, data) { + apiUrl.replace('//', '/'); + const req = { + url: apiUrl, + data: data + }; + + return this.dataService.post(req); + } + + putData(apiUrl, id, data) { + var url; + if (apiUrl.charAt(0) == '/') { + url = `${this.baseUrl}${apiUrl}/${id}` + } + else { + url = `${this.baseUrl}/${apiUrl}/${id}`; + } + const req = { + url: url, + data: data + }; + return this.dataService.put(req); + } + + // Configurations + getConfigs() { + let url = "./assets/config/config.json"; + const req = { + url: url + }; + + return this.dataService.get(req); + } + + updateclaims(apiUrl, data) { + let url = `${this.baseUrl}${apiUrl}`; + const req = { + url: url, + data: data + }; + return this.dataService.put(req); + } + + translateString(constantStr){ + this.translate.get(constantStr).subscribe((val)=>{ + this.translatedString = val; + }); + return this.translatedString; + } + + attestationReq(apiUrl, data) { + let url = `${this.baseUrl}${apiUrl}`; + const req = { + url: url, + data: data + }; + return this.dataService.put(req); + } + + + openPDF(url){ + url = `${this.baseUrl}` + '/' + `${url}`; + + let requestOptions = { responseType: 'blob' as 'blob' }; + // post or get depending on your requirement + this.http.get(url, requestOptions).pipe(map((data: any) => { + + let blob = new Blob([data], { + type: 'application/pdf' // must match the Accept type + // type: 'application/octet-stream' // for excel + }); + var link = document.createElement('a'); + link.href = window.URL.createObjectURL(blob); + + window.open(link.href, '_blank') + // link.download = 'temp.pdf'; + // link.click(); + // window.URL.revokeObjectURL(link.href); + + })).subscribe((result: any) => { + }); + } + +} + diff --git a/src/app/services/theme/theme.service.spec.ts b/src/app/services/theme/theme.service.spec.ts new file mode 100644 index 0000000..1c2957b --- /dev/null +++ b/src/app/services/theme/theme.service.spec.ts @@ -0,0 +1,16 @@ +import { TestBed } from '@angular/core/testing'; + +import { ThemeService } from './theme.service'; + +describe('ThemeService', () => { + let service: ThemeService; + + beforeEach(() => { + TestBed.configureTestingModule({}); + service = TestBed.inject(ThemeService); + }); + + it('should be created', () => { + expect(service).toBeTruthy(); + }); +}); diff --git a/src/app/services/theme/theme.service.ts b/src/app/services/theme/theme.service.ts new file mode 100644 index 0000000..200b776 --- /dev/null +++ b/src/app/services/theme/theme.service.ts @@ -0,0 +1,19 @@ +import { DOCUMENT } from '@angular/common'; +import { Inject, Injectable } from '@angular/core'; +import { THEMES } from '../../theme.config'; + +@Injectable({ + providedIn: 'root', +}) +export class ThemeService { + constructor(@Inject(DOCUMENT) private document: Document) {} + + setTheme(name = 'default') { + if(THEMES){ + const theme = THEMES[name]; + Object.keys(theme).forEach((key) => { + this.document.documentElement.style.setProperty(`--${key}`, theme[key]); + }); + } + } +} diff --git a/src/app/services/toast-message/toast-message.service.spec.ts b/src/app/services/toast-message/toast-message.service.spec.ts new file mode 100644 index 0000000..8db386b --- /dev/null +++ b/src/app/services/toast-message/toast-message.service.spec.ts @@ -0,0 +1,16 @@ +import { TestBed } from '@angular/core/testing'; + +import { ToastMessageService } from './toast-message.service'; + +describe('ToastMessageService', () => { + let service: ToastMessageService; + + beforeEach(() => { + TestBed.configureTestingModule({}); + service = TestBed.inject(ToastMessageService); + }); + + it('should be created', () => { + expect(service).toBeTruthy(); + }); +}); diff --git a/src/app/services/toast-message/toast-message.service.ts b/src/app/services/toast-message/toast-message.service.ts new file mode 100644 index 0000000..df39270 --- /dev/null +++ b/src/app/services/toast-message/toast-message.service.ts @@ -0,0 +1,39 @@ +import { Injectable } from '@angular/core'; +import { ToastrService } from 'ngx-toastr'; + +@Injectable({ + providedIn: 'root' +}) +export class ToastMessageService { + + constructor( + private toastr: ToastrService + ) { } + + success(title, message) { + this.destroytoast(); + this.toastr.success(message, title); + } + + error(title, message) { + this.destroytoast(); + this.toastr.error(message, title); + } + + info(title, message) { + this.destroytoast(); + this.toastr.info(message, title); + } + + warning(title, message) { + this.destroytoast(); + this.toastr.warning(message, title); + } + + /** + * Destroys IziToast + */ + destroytoast() { + this.toastr.clear(); + } +} diff --git a/src/app/tables/attestation/attestation.component.css b/src/app/tables/attestation/attestation.component.css new file mode 100644 index 0000000..a975ac1 --- /dev/null +++ b/src/app/tables/attestation/attestation.component.css @@ -0,0 +1,12 @@ +nav { + overflow: hidden; + /* padding: 1em; */ + position: fixed; + top: 0px; + display: block; + width: 100%; + z-index: 1; +} +.container{ + margin-top: 100px; +} \ No newline at end of file diff --git a/src/app/tables/attestation/attestation.component.html b/src/app/tables/attestation/attestation.component.html new file mode 100644 index 0000000..97b7443 --- /dev/null +++ b/src/app/tables/attestation/attestation.component.html @@ -0,0 +1,237 @@ +
+ +
+
+

{{'ATTESTATION_CLAIM_OF' | translate}} {{claimData?.requestorName}}

+ +
+
+

{{'REVIEW_AND_ATTEST_CLAIM' | translate}}

+ + + + + + +
+ +
+
+
+
+
+
+ {{item?.title}} : {{item?.value}} +
+ +
{{item?.title}}: + + + {{item?.value}} + + + +
+ + Grades : {{item?.value[i]?.grades}} , + + + Subjects : {{item?.value[i]?.subjects}} + + + {{subField}} + +
+
+
+
+
+ +
+
+ + +
+ +
+ +
+ +
+ + + +
{{'NOTE_ADDED' | translate}} +
+
+
+ + + + +
+ +
+ +
{{noteData.notes}}
+ + {{'BY' | translate}} {{noteData.addedBy}}, + {{noteData.createdAt | date : 'd MMM y'}} + + +
+
+ + +
+ +
+
+
+
+
+ +
+ + + +

{{'PUBLIC_PROFILE_OF' | translate}} {{claimData?.requestorName}}

+
+
+
+ + + + + + + + + + +
+
+
+
+
+
diff --git a/src/app/tables/attestation/attestation.component.spec.ts b/src/app/tables/attestation/attestation.component.spec.ts new file mode 100644 index 0000000..3b0ef7e --- /dev/null +++ b/src/app/tables/attestation/attestation.component.spec.ts @@ -0,0 +1,25 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { AttestationComponent } from './attestation.component'; + +describe('AttestationComponent', () => { + let component: AttestationComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [ AttestationComponent ] + }) + .compileComponents(); + }); + + beforeEach(() => { + fixture = TestBed.createComponent(AttestationComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/src/app/tables/attestation/attestation.component.ts b/src/app/tables/attestation/attestation.component.ts new file mode 100644 index 0000000..9f01ae5 --- /dev/null +++ b/src/app/tables/attestation/attestation.component.ts @@ -0,0 +1,366 @@ +import { Component, OnInit } from '@angular/core'; +import { ActivatedRoute, Router } from '@angular/router'; +import { GeneralService } from 'src/app/services/general/general.service'; + +import { FormGroup } from '@angular/forms'; +import { FormlyFieldConfig, FormlyFormOptions } from '@ngx-formly/core'; +import { AppConfig } from '../../app.config'; +import { TranslateService } from '@ngx-translate/core'; +import { SchemaService } from 'src/app/services/data/schema.service'; + +@Component({ + selector: 'app-form-detail', + templateUrl: './attestation.component.html', + styleUrls: ['./attestation.component.css'] +}) +export class AttestationComponent implements OnInit { + + noteForm = new FormGroup({}); + denyForm = new FormGroup({}); + + model: any = {}; + options: FormlyFormOptions = {}; + + denyFields: FormlyFieldConfig[] = [ + { + key: 'note', + type: 'textarea', + templateOptions: { + label: 'Reason for denied', + required: true, + description: "This note will be sent to user", + placeholder: "Type message here" + } + } + ]; + + noteFields: FormlyFieldConfig[] = [ + { + key: 'note', + type: 'textarea', + templateOptions: { + label: 'Note (Maximum Characters limit 250)', + maxLength: 250, + description: "note sent on user", + }, + validation: { + messages: { + maxlength: "Maximum Characters limit exceeded (250)" + } + } + } + ]; + + entityId: string; + user: any; + education: any; + educationDetail: any; + experience: any; + experienceDetail: any; + id: string; + type: string; + contact: string; + consent: any = false; + noteAdded: boolean = false; + claimId: string; + entityIdt: string; + + approveNoteSchema = { + "type": "object", + "title": "Invite", + "properties": { + "note": { + "type": "string", + }, + } + } + + commentSchema = { + "type": "object", + "title": "Comments", + "properties": { + "comment": { + "type": "string", + }, + } + } + + denyNoteSchema = { + "type": "object", + "title": "Invite", + "required": [ + "note" + ], + "properties": { + "note": { + "title": "Reason for deny", + "type": "textarea", + }, + } + } + + form = [ + { + "key": "note", + "type": "textarea", + "placeholder": "Type message here.. " + }, + { + "type": "submit", + "style": "btn btn-primary text-end mb-3 fw-bold text-capitalize", + "title": "Submit" + } + ] + + form1 = [ + { + "key": "comment", + "type": "textarea", + "placeholder": "Add a Comment..." + }, + { + "type": "submit", + "style": "btn btn-primary text-end mb-3 fw-bold text-capitalize", + "title": "Save" + } + ] + + apiUrl: any; + claimData: any; + attestationData: any; + entity: any; + osid: any; + propertyData: any[] = []; + claimEntity: any; + claimEntityId: any; + profileData: any; + profile: boolean; + note: any = ""; + comment: any = ""; + table: any; + documents = null; + notes: any[] = []; + logo: any; + fileURL: string; + titleVal: any; + formSchema: any; + langKey: any; + constructor( + public router: Router, + private route: ActivatedRoute, + public generalService: GeneralService, + private config: AppConfig, + public translate: TranslateService, + public schemaService: SchemaService + ) { + this.logo = this.config.getEnv(localStorage.getItem('ELOCKER_THEME') + '_theme').logoPath; + + } + + ngOnInit(): void { + this.router.routeReuseStrategy.shouldReuseRoute = () => false; + console.log("router",this.router.url) + // var tab_url = this.router.url + this.route.params.subscribe(async params => { + console.log("-------------------",params) + this.table = (params['table']).toLowerCase() + // this.entity = (params['entity']).charAt(0).toUpperCase() + params['entity'].slice(1); + this.entity = params['entity'] + this.claimId = params['id'] + if((params['entity']).includes('board')){ + console.log("board--",params['entity']) + this.entity = params['entity'] + } + this.apiUrl = `/${this.entity}/claims/${this.claimId}`; + // await this.getData(); + }); + + // this.generalService.getData("/"+this.entity).subscribe((res) => { + // console.log("res1",res) + // this.osid = res[0].osid; + // }) + + this.generalService.getData(this.apiUrl).subscribe((res) => { + // this.entityIdt = res[0].osid; + console.log("res1",res) + if(res.claim){ + this.claimEntityId = res.claim.entityId + this.claimEntity = res.claim.entity; + this.claimData = res.claim; + this.notes = res.notes; + let noteDesc = 'This note will be sent to ' + this.claimData?.requestorName; + this.denyFields[0].templateOptions.description = noteDesc; + this.noteFields[0].templateOptions.description = noteDesc; + + this.attestationData = JSON.parse(this.claimData.propertyData); + + this.schemaService.getFormJSON().subscribe((FormSchemas) => { + let temp = this.claimEntity.toLowerCase() + '-' + 'setup'; + var filtered = FormSchemas.forms.filter(obj => { + + return Object.keys(obj)[0] === temp + }) + + this.formSchema = filtered[0][temp] + + if (this.formSchema.langKey) { + this.langKey = this.formSchema.langKey; + } + + + + let _self = this; + Object.keys(this.attestationData).forEach(function (key) { + if(typeof(_self.attestationData[key]) == 'object') + { + _self.attestationData = _self.attestationData[key][0]; + _self.removeCommonFields(); + _self.generateData() + } + + }); + + this.generalService.getData("/"+ this.claimData.propertyURI).subscribe((res) => { + console.log("res2",res) + this.attestationData = res; + this.removeCommonFields(); + this.generateData() + }) + + + this.generalService.getData(this.claimEntity+"/"+this.claimEntityId).subscribe((res) => { + console.log("profileData",res); + + this.profileData = res; + this.profile = true + // this.removeCommonFields(); + // this.generateData() + }) + + }); + } + }) + + + //history.state; + // this.getStudentData(); + } + + generateData(){ + for (const [index, [key, value]] of Object.entries(Object.entries(this.attestationData))) { + console.log("att", key, value) + if(key === 'documents'){ + this.documents = value; + console.log("documents", this.documents) + } + else{ + // if(Array.isArray(value)){ + // value.forEach(element => { + // for (const [index2, [key2, value2]] of Object.entries(Object.entries(element))) { + // var temp_object2 = {}; + // temp_object2['title'] = (key2).charAt(0).toUpperCase() + key2.slice(1); + // temp_object2['value'] = value2; + // this.propertyData.push(temp_object2); + // } + // }); + + // }else{ + // var temp_object = {}; + // temp_object['title'] = (key).charAt(0).toUpperCase() + key.slice(1); + // temp_object['value'] = value; + // this.propertyData.push(temp_object); + // } + var temp_object = {}; + // temp_object['title'] = (key).charAt(0).toUpperCase() + key.slice(1); + temp_object['title'] = this.check(key); + temp_object['value'] = value; + this.propertyData.push(temp_object); + } + } + console.log("propertyData",this.propertyData) + } + + + check(conStr) { + this.translate.get(this.langKey + '.' + conStr).subscribe(res => { + let constr = this.langKey + '.' + conStr; + if (res != constr) { + this.titleVal = res; + } else { + this.titleVal = conStr; + } + }); + return this.titleVal; + } + + removeCommonFields() { + var commonFields = ['osCreatedAt', 'osCreatedBy', 'osUpdatedAt', 'osUpdatedBy','OsUpdatedBy','_osAttestedData', 'osid','_osClaimId','_osState','Osid', 'InstituteOSID', 'TeacherOSID', 'sorder']; + commonFields.forEach(element => { + if(this.attestationData.hasOwnProperty(element)){ + delete this.attestationData[element] + } + + }); + // const filteredArray = this.attestationData.filter(function (x, i) { + // return commonFields.indexOf(x[i]) < 0; + // }); + } + + onAttestApproveReject(action,event) { + console.log(this.form); + // if(action == 'REJECT_CLAIM') + // { + // this.note = event.note + // } + + //this.note = this.denyForm.value.note ? this.denyForm.value.note : this.note; + let data = { + "action": action, + "notes": this.denyForm.value.note ? this.denyForm.value.note : this.note + } + console.log("data--",data); + var url = this.entity+"/claims/"+this.claimId+"/attest" + this.generalService.postData(url, data).subscribe((res) => { + // alert('success'); + console.log(res); + + }); + this.router.navigate([this.entity,'attestation',this.table]).then(() => { + window.location.reload(); + }); + + + //this.noteAdded = true; + // this.router.navigate(['institute-attestation']); + // window.location.reload(); + } + + getPathUrl(filepath) + { + this.generalService.openPDF('/' + filepath ); + } + + + typeOf(value) { + return typeof value; + } + + onConsent() { } + + saveNote(){ + // localStorage.setItem('note', JSON.stringify(event)); + console.log('evv noteForm -- ', this.noteForm.value.note); + this.note = this.noteForm.value.note; + this.noteAdded = true; + } + + saveComments(event){ + console.log('evv ',event.comment); + } + + close(){ + console.log('here') + this.router.navigate([this.entity,'attestation',this.table]); + } + +} diff --git a/src/app/tables/tables.component.css b/src/app/tables/tables.component.css new file mode 100644 index 0000000..09967f1 --- /dev/null +++ b/src/app/tables/tables.component.css @@ -0,0 +1,9 @@ +.mt-150{ + margin-top: 120px; +} + +@media (max-width: 767.98px) { + .mt-150{ + margin-top: 150px; + } +} \ No newline at end of file diff --git a/src/app/tables/tables.component.html b/src/app/tables/tables.component.html new file mode 100644 index 0000000..96a8b82 --- /dev/null +++ b/src/app/tables/tables.component.html @@ -0,0 +1,78 @@ + +
+

{{tableSchema?.title | translate}}

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
{{th?.title | translate}}
+ + View + + {{td?.value | date : 'd MMM y'}}{{td?.value}} {{td?.value}}
+ + + + + + + + + + + + + +
+ {{'NO_RECORDS_FOUND' | translate }} +
+ +
diff --git a/src/app/tables/tables.component.spec.ts b/src/app/tables/tables.component.spec.ts new file mode 100644 index 0000000..211cf5f --- /dev/null +++ b/src/app/tables/tables.component.spec.ts @@ -0,0 +1,25 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { TablesComponent } from './tables.component'; + +describe('TablesComponent', () => { + let component: TablesComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [ TablesComponent ] + }) + .compileComponents(); + }); + + beforeEach(() => { + fixture = TestBed.createComponent(TablesComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/src/app/tables/tables.component.ts b/src/app/tables/tables.component.ts new file mode 100644 index 0000000..76489bc --- /dev/null +++ b/src/app/tables/tables.component.ts @@ -0,0 +1,133 @@ +import { Component, OnInit } from '@angular/core'; +import { ActivatedRoute, Router } from '@angular/router'; +import { SchemaService } from '../services/data/schema.service'; +import { GeneralService } from '../services/general/general.service'; +// import * as TableSchemas from './tables.json' + +@Component({ + selector: 'app-tables', + templateUrl: './tables.component.html', + styleUrls: ['./tables.component.css'] +}) +export class TablesComponent implements OnInit { + table: any; + entity: any; + tab: string = 'attestation' + tableSchema: any; + apiUrl: any; + model: any; + Data: string[] = []; + property: any[] = []; + field; + + page: number = 1; + limit: number = 10; + + constructor(public router: Router, private route: ActivatedRoute, public generalService: GeneralService, public schemaService: SchemaService) { } + + ngOnInit(): void { + this.router.routeReuseStrategy.shouldReuseRoute = () => false; + var tab_url = this.router.url + this.route.params.subscribe(async params => { + this.table = (params['table']).toLowerCase() + this.entity = (params['entity']).toLowerCase(); + this.tab = tab_url.replace(this.table, "").replace(this.entity, "").split("/").join("") + this.schemaService.getTableJSON().subscribe(async (TableSchemas) => { + var filtered = TableSchemas.tables.filter(obj => { + return Object.keys(obj)[0] === this.table + }) + this.tableSchema = filtered[0][this.table] + this.apiUrl = this.tableSchema.api; + this.limit = filtered[0].hasOwnProperty(this.limit) ? filtered[0].limit : this.limit; + await this.getData(); + }) + + }); + } + + openPreview(item){ +console.log(item); + } + + getData() { + var get_url; + if (this.entity) { + get_url = this.apiUrl + } else { + console.log("Something went wrong") + } + + if(get_url.includes('Search') || get_url.includes('search')) + { + let data = { + "filters": { + } + }; + + this.generalService.postData(get_url, data).subscribe((res) => { + this.model = res; + // this.entity = res[0].osid; + this.addData() + }); + + }else{ + this.generalService.getData(get_url).subscribe((res) => { + this.model = res; + // this.entity = res[0].osid; + this.addData() + }); + } + + } + + addData() { + + var temp_array; + let temp_object + this.model.forEach(element => { + // if (element.status === "OPEN") { + temp_array = []; + this.tableSchema.fields.forEach((field) => { + + temp_object = field; + + if (temp_object.name) { + temp_object['value'] = element[field.name] + temp_object['status'] = element['status'] + } + if (temp_object.formate) { + temp_object['formate'] = field.formate + } + if (temp_object.custom) { + if (temp_object.type == "button") { + if (temp_object.redirectTo && temp_object.redirectTo.includes(":")) { + let urlParam = temp_object.redirectTo.split(":") + urlParam.forEach((paramVal, index) => { + if (paramVal in element) { + urlParam[index] = element[paramVal] + } + }); + temp_object['redirectToUrl'] = urlParam.join("/").replace("//", "/"); + } + } + temp_object['type'] = field.type + } + temp_array.push(this.pushData(temp_object)); + }); + this.property.push(temp_array) + // } + }); + + this.tableSchema.items = this.property; + } + + pushData(data) { + var object = {}; + for (var key in data) { + if (data.hasOwnProperty(key)) + object[key] = data[key]; + } + return object; + } + +} diff --git a/src/app/theme.config.ts b/src/app/theme.config.ts new file mode 100644 index 0000000..99ccf6c --- /dev/null +++ b/src/app/theme.config.ts @@ -0,0 +1,51 @@ + +import { HttpClient } from '@angular/common/http'; + +export var THEMES: { default: any; dark: any; }; + +export function initTheme(http: HttpClient) { + + return () => { + + http.get('./assets/config/config.json').subscribe((res)=>{ + THEMES = { + default : res['default_theme'], + dark: res['dark_theme'] + } + }); + } + +} + +/*export const THEMES = { + + default: { + primaryColor: "#1987B6", + secondaryColor: "#e8f3f8", + bodyBackground: "#F6F8FC", + cardBackground: "#FFFFFF", + tagsBackground: "#F4ECFF", + navLabelColor: "#0098AB", + headerColor: "#FFFFFF", + headerLinkColor: "#0098AB", + primaryTextColor: "#000000", + secondaryTextColor: "#000000", + linkColor: "#443DF6", + secondaryBtnBgColor: "#e8f3f8", + }, + dark: { + primaryColor: "#1987B6", + secondaryColor: "#1987B6", + bodyBackground: "#080808", + cardBackground: "#323232", + tagsBackground: "#505050", + navLabelColor: "#0098AB", + headerColor: "#313131", + primaryTextColor: "#FFFFFF", + secondaryTextColor: "#c3c3c3", + linkColor: "#443DF6", + secondaryBtnBgColor: "#e8f3f8", + + } +};*/ + diff --git a/src/app/utility/app.guard.ts b/src/app/utility/app.guard.ts new file mode 100644 index 0000000..621ea3b --- /dev/null +++ b/src/app/utility/app.guard.ts @@ -0,0 +1,52 @@ +import { Injectable } from '@angular/core'; +import { + ActivatedRouteSnapshot, + Router, + RouterStateSnapshot, +} from '@angular/router'; +import { KeycloakAuthGuard, KeycloakEvent, KeycloakEventType, KeycloakService } from 'keycloak-angular'; +import { KeycloakLoginOptions } from 'keycloak-js'; + +@Injectable({ + providedIn: 'root', +}) +export class AuthGuard extends KeycloakAuthGuard { + constructor( + protected readonly router: Router, + protected readonly keycloak: KeycloakService + ) { + super(router, keycloak); + } + + public async isAccessAllowed( + route: ActivatedRouteSnapshot, + state: RouterStateSnapshot + ): Promise { + // Force the user to log in if currently unauthenticated. + if (!this.authenticated) { + /* await this.keycloak.login({ + redirectUri: window.location.origin + state.url, + });*/ + this.keycloak + .getKeycloakInstance() + .login({ + locale: localStorage.getItem('setLanguage'), + redirectUri: window.location.origin + state.url + }) + .then((res) => { + console.log({ res }); + }); + } + + // Get the roles required from the route. + const requiredRoles = route.data.roles; + + // Allow the user to to proceed if no additional roles are required to access the route. + if (!(requiredRoles instanceof Array) || requiredRoles.length === 0) { + return true; + } + + // Allow the user to proceed if all the required roles are present. + return requiredRoles.every((role) => this.roles.includes(role)); + } +} diff --git a/src/app/utility/app.init.ts b/src/app/utility/app.init.ts new file mode 100644 index 0000000..58f17e7 --- /dev/null +++ b/src/app/utility/app.init.ts @@ -0,0 +1,56 @@ + +import { KeycloakService } from 'keycloak-angular'; +import { switchMap } from 'rxjs/operators'; +import { from as fromPromise, Observable } from 'rxjs'; +import { AuthConfigService } from '../authentication/auth-config.service'; + +export function initializeKeycloak(keycloak: KeycloakService, configService: AuthConfigService) { + return () => + configService.getConfig() + .pipe( + switchMap((config) => { + // console.log('conf---',config); + if(config != null && config.keycloak){ + return fromPromise(keycloak.init({ + config: { + url: config['keycloak']['url'], + realm: config['keycloak']['realm'], + clientId: config['keycloak']['clientId'], + }, + initOptions: { + checkLoginIframe: true, + checkLoginIframeInterval: 25 + }, + loadUserProfileAtStartUp: true + })) + }else{ + return fromPromise(keycloak.init({ + config: { + url: 'https://skills.xiv.in/auth', + realm: 'sunbird-rc', + clientId: 'registry-frontend', + }, + initOptions: { + checkLoginIframe: true, + checkLoginIframeInterval: 25 + }, + loadUserProfileAtStartUp: true + })) + } + }) + ).toPromise() +} +// return () => +// keycloak.init({ +// config: { +// url: 'https://demo-education-registry.xiv.in/auth', +// realm: 'ndear', +// clientId: 'registry-frontend', +// }, +// initOptions: { +// checkLoginIframe: true, +// checkLoginIframeInterval: 25 +// }, +// loadUserProfileAtStartUp: true +// }); +// } diff --git a/src/app/utility/keyCloak-login..ts b/src/app/utility/keyCloak-login..ts new file mode 100644 index 0000000..12bec26 --- /dev/null +++ b/src/app/utility/keyCloak-login..ts @@ -0,0 +1,31 @@ +import { Injectable } from '@angular/core'; +import { + ActivatedRouteSnapshot, + Router, + RouterStateSnapshot, +} from '@angular/router'; +import { KeycloakAuthGuard, KeycloakService } from 'keycloak-angular'; + +@Injectable({ + providedIn: 'root', +}) +export class KeyCloakLogin { + user; + constructor( + protected readonly router: Router, + protected readonly keycloak: KeycloakService + ) { + } + + ngOnInit(): void { + + + this.user = this.keycloak.getUsername(); + this.keycloak.getToken().then((token)=>{ + console.log('keyCloak token - ', token); + localStorage.setItem('token', token); + localStorage.setItem('loggedInUser', this.user) + }); + +} +} \ No newline at end of file diff --git a/src/assets/config/.gitkeep b/src/assets/config/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/src/assets/config/config.json b/src/assets/config/config.json new file mode 100644 index 0000000..dafdb38 --- /dev/null +++ b/src/assets/config/config.json @@ -0,0 +1,52 @@ +{ + "environment": "development", + "keycloak": { + "url": "http://localhost:8080/auth", + "clientId": "registry-frontend", + "realm": "sunbird-rc" + }, + "configFolder": "/assets/config/ui-config", + "languageFolder": "/assets/i18n", + "title": "Educate Girls", + "baseUrl": "http://localhost:4200/api/v1", + "schemaUrl": "http://localhost:8081/api/docs/swagger.json", + "footerText": "Educate Girls", + "languages": [ + "en", + "hi" + ], + "appType": "attestation", + "default_theme": { + "logoPath": "/assets/images/logo.png", + "primaryColor": "#1987B6", + "secondaryColor": "#1987B6", + "bodyBackground": "#F6F8FC", + "cardBackground": "#FFFFFF", + "tagsBackground": "#F4ECFF", + "navLabelColor": "#0098AB", + "headerColor": "#FFFFFF", + "primaryTextColor": "#000000", + "secondaryTextColor": "#000000", + "headerLinkColor": "#000000", + "linkColor": "#443DF6", + "secondaryBtnBgColor": "#e0edf5", + "cardBorder": "#00000020" + + }, + "dark_theme": { + "logoPath": "/assets/images/logo.png", + "primaryColor": "#1987B6", + "secondaryColor": "#1987B6", + "bodyBackground": "#080808", + "cardBackground": "#323232", + "tagsBackground": "#505050", + "navLabelColor": "#0098AB", + "headerColor": "#313131", + "primaryTextColor": "#FFFFFF", + "secondaryTextColor": "#c3c3c3", + "headerLinkColor": "#0098AB", + "linkColor": "#443DF6", + "secondaryBtnBgColor": "#e0edf5", + "cardBorder": "#ffffff20" + } +} diff --git a/src/assets/config/home.html b/src/assets/config/home.html new file mode 100644 index 0000000..91aec8c --- /dev/null +++ b/src/assets/config/home.html @@ -0,0 +1,77 @@ +
+
+ + +
+
+
+
+
+

Prerak

+

+ Are you a Prerak?
+ Create your profile +

+
+ Create +
+
+
+
+
+
+
+

Student (AG)

+

+ Are you a Student?
+ Create your profile +

+
+ Create +
+
+
+
+ + +
+
\ No newline at end of file diff --git a/src/assets/config/swagger.json b/src/assets/config/swagger.json new file mode 100644 index 0000000..87d9c12 --- /dev/null +++ b/src/assets/config/swagger.json @@ -0,0 +1,933 @@ +{ + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "schemes": [ + "https" + ], + "swagger": "2.0", + "info": { + "description": "Sunbird registry and credential api (SunbirdRC)", + "title": "Sunbird Registry and Credential", + "version": "1.0.0" + }, + "host": "ndear.xiv.in", + "basePath": "/", + "definitions": { + "Prerak": { + "type": "object", + "title": "The Prerak Schema", + "required": [], + "properties": { + "identityDetails": { + "type": "object", + "title": "Identity Details", + "description": "Identity Details", + "required": [], + "properties": { + "fullName": { + "$id": "#/properties/fullName", + "type": "string", + "title": "Full name" + }, + "gender": { + "$id": "#/properties/gender", + "type": "string", + "enum": [ + "Male", + "Female", + "Other" + ], + "title": "Gender" + }, + "dob": { + "$id": "#/properties/dob", + "type": "string", + "format": "date", + "title": "DOB" + } + } + }, + "contactDetails": { + "type": "object", + "title": "Contact Details", + "description": "Contact Details", + "required": [], + "properties": { + + "mobile": { + "$id": "#/properties/mobile", + "type": "string", + "title": "Contact Number" + }, + "address": { + "type": "object", + "required": [], + "properties": { + "block": { + "type": "string", + "title": "Block" + }, + "district": { + "type": "string", + "title": "District" + }, + "village": { + "type": "string", + "title": "Village/Town/City" + } + } + } + } + }, + "academicQualifications": { + "type": "array", + "items": { + "type": "object", + "properties": { + "instituteOSID": { + "$id": "#/properties/instituteOSID", + "type": "string", + "title": "Institute OSID" + }, + "instituteName": { + "$id": "#/properties/instituteName", + "type": "string", + "title": "Institute Name" + }, + "qualification": { + "$id": "#/properties/qualification", + "type": "string", + "title": "Qualification" + }, + "program": { + "$id": "#/properties/program", + "type": "string", + "title": "Program of Study" + }, + "graduationYear": { + "$id": "#/properties/graduationYear", + "type": "string", + "title": "Year of Graduation" + }, + "marks": { + "$id": "#/properties/marks", + "type": "string", + "title": "Marks / Ranking / GPA, etc" + } + } + }, + "title": "Education Details" + }, + "experience": { + "type": "array", + "items": { + "type": "object", + "properties": { + "instituteOSID": { + "$id": "#/properties/instituteOSID", + "type": "string", + "title": "Institute OSID" + }, + "instituteName": { + "$id": "#/properties/instituteName", + "type": "string", + "title": "Institute Name" + }, + "employmentType": { + "$id": "#/properties/employmentType", + "type": "string", + "title": "Employment Type", + "enum": [ + "Permanent", + "Contract" + ] + }, + "start": { + "$id": "#/properties/start", + "type": "string", + "format": "date", + "title": "Start Date" + }, + "end": { + "$id": "#/properties/end", + "type": "string", + "format": "date", + "title": "End Date" + }, + "teacherType": { + "$id": "#/properties/teacherType", + "type": "string", + "title": "Teacher Type", + "enum": [ + "Head teacher", + "Acting head teacher", + "Teacher", + "Instructor positioned as per RTE", + "Principal", + "VicePrincipal", + "Lecturer" + ] + }, + "subjectsTaught": { + "$id": "#/properties/subjectsTaught", + "title": "Subjects Taught", + "type": "array", + "items": { + "type": "object", + "properties": { + "subjects": { + "$id": "#/properties/subjects", + "type": "string", + "title": "Subject", + "enum": [ + "English", + "Kannada", + "Mathematics", + "Science", + "Social Science", + "Art" + ] + }, + "grades": { + "$id": "#/properties/grades", + "type": "string", + "title": "Grades", + "enum": [ + "Pre-Pri.", + "Class I", + "Class II", + "Class III", + "Class IV", + "Class V", + "Class VI", + "Class VII", + "Class VIII", + "Class IX", + "Class X", + "Class XI", + "Class XII" + ] + } + } + } + } + } + }, + "title": "Professional Experience" + } + } + }, + "PrerakOsConfig": { + "osComment": [ + "This section contains the OpenSABER specific configuration information", + "privateFields: Optional; list of field names to be encrypted and stored in database", + "signedFields: Optional; list of field names that must be pre-signed", + "indexFields: Optional; list of field names used for creating index. Enclose within braces to indicate it is a composite index. In this definition, (serialNum, teacherCode) is a composite index and teacherName is a single column index.", + "uniqueIndexFields: Optional; list of field names used for creating unique index. Field names must be different from index field name", + "systemFields: Optional; list of fields names used for system standard information like created, updated timestamps and userid" + ], + "privateFields": [ + "$.identityDetails.dob", + "$.identityDetails.identityType", + "$.identityDetails.identityValue", + "$.contactDetails.email", + "$.contactDetails.mobile", + "$.contactDetails.address.plot", + "$.contactDetails.address.street", + "$.contactDetails.address.landmark", + "$.contactDetails.address.locality" + ], + "signedFields": [], + "indexFields": [], + "uniqueIndexFields": [ + "identityValue" + ], + "systemFields": [ + "osCreatedAt", + "osUpdatedAt", + "osCreatedBy", + "osUpdatedBy" + ], + "attestationPolicies": [ + { + "name": "teacherExperience", + "conditions": "(ATTESTOR#$.osid#.contains(REQUESTER#$.experience.*.instituteOSID#))", + "type": "MANUAL", + "attestorPlugin": "did:internal:ClaimPluginActor?entity=Institute", + "attestationProperties": { + "experience": "$.experience" + } + }, + { + "name": "teacherAcademicsQualification", + "conditions": "(ATTESTOR#$.osid#.contains(REQUESTER#$.academicQualifications.*.instituteOSID#))", + "type": "MANUAL", + "attestorPlugin": "did:internal:ClaimPluginActor?entity=Institute", + "attestationProperties": { + "academicQualifications": "$.academicQualifications" + } + } + ], + "internalFields": [], + "inviteRoles": [ + "anonymous" + ], + "enableLogin": true, + "ownershipAttributes": [ + { + "email": "/contactDetails/email", + "mobile": "/contactDetails/mobile", + "userId": "/contactDetails/mobile" + } + ] + }, + "Student": { + "type": "object", + "title": "The Student Schema", + "required": [], + "properties": { + "identityDetails": { + "type": "object", + "title": "Identity Details", + "description": "Identity Details", + "required": [], + "properties": { + "fullName": { + "$id": "#/properties/fullName", + "type": "string", + "title": "Full name" + }, + "gender": { + "$id": "#/properties/gender", + "type": "string", + "enum": [ + "Male", + "Female", + "Other" + ], + "title": "Gender" + }, + "dob": { + "$id": "#/properties/dob", + "type": "string", + "format": "date", + "title": "DOB" + }, + "identityHolder": { + "type": "object", + "properties": { + "type": { + "$id": "#/properties/type", + "type": "string", + "$comment": "Nationality", + "title": "ID Type", + "enum": [ + "AADHAR", + "PAN", + "LICENSE", + "OTHER" + ] + }, + "value": { + "$id": "#/properties/value", + "type": "string", + "$comment": "Nationality", + "title": "ID Value" + } + } + } + } + }, + "contactDetails": { + "type": "object", + "title": "Contact Details", + "description": "Contact Details", + "required": [], + "properties": { + "email": { + "$id": "#/properties/email", + "type": "string", + "title": "Email" + }, + "mobile": { + "$id": "#/properties/mobile", + "type": "string", + "title": "Mobile" + }, + "address": { + "type": "object", + "required": [], + "properties": { + "plot": { + "type": "string", + "title": "Plot" + }, + "street": { + "type": "string", + "title": "Street" + }, + "landmark": { + "type": "string", + "title": "Landmark" + }, + "locality": { + "type": "string", + "title": "Locality" + }, + "state": { + "type": "string", + "title": "State", + "enum": [ + "Andaman and Nicobar Islands", + "Andhra Pradesh", + "Arunachal Pradesh", + "Assam", + "Bihar", + "Chandigarh", + "Chhattisgarh", + "Dadra and Nagar Haveli", + "Daman and Diu", + "Delhi", + "Goa", + "Gujarat", + "Haryana", + "Himachal Pradesh", + "Jammu and Kashmir", + "Jharkhand", + "Karnataka", + "Kerala", + "Ladakh", + "Lakshadweep", + "Madhya Pradesh", + "Maharashtra", + "Manipur", + "Meghalaya", + "Mizoram", + "Nagaland", + "Odisha", + "Puducherry", + "Punjab", + "Rajasthan", + "Sikkim", + "Tamil Nadu", + "Telangana", + "Tripura", + "Uttar Pradesh", + "Uttarakhand", + "West Bengal" + ] + }, + "district": { + "type": "string", + "title": "District" + }, + "village": { + "type": "string", + "title": "Village/Town/City" + }, + "pincode": { + "type": "string", + "title": "Pincode" + } + } + } + } + }, + "educationDetails": { + "type": "array", + "items": { + "type": "object", + "properties": { + "institute": { + "$id": "#/properties/institute", + "type": "string", + "title": "Institute Name" + }, + "instituteOSID": { + "$id": "#/properties/instituteOSID", + "type": "string", + "title": "Institute Osid" + }, + "board": { + "$id": "#/properties/board", + "type": "string", + "title": "Board of Education" + }, + "medium": { + "$id": "#/properties/program", + "type": "string", + "enum": [ + "English", + "Hindi", + "Gujarati", + "Malayalam", + "Tamil" + ], + "title": "Medium of Education" + }, + "class": { + "$id": "#/properties/graduationYear", + "type": "string", + "enum": [ + "Pre-Pri.", + "Class I", + "Class II", + "Class III", + "Class IV", + "Class V", + "Class VI", + "Class VII", + "Class VIII", + "Class IX", + "Class X", + "Class XI", + "Class XII" + ], + "title": "Current Enrollment Class / Std." + }, + "documents": { + "type": "array", + "items": { + "type": "object", + "properties": { + "fileName": { + "type": "string", + "format": "file" + } + } + }, + "title": "Education related documents" + } + } + }, + "title": "Education Details" + }, + "guardianDetails": { + "type": "object", + "properties": { + "fullName": { + "$id": "#/properties/fullName", + "type": "string", + "title": "Guardian's Full Name" + }, + "relation": { + "$id": "#/properties/relation", + "type": "string", + "title": "Guardian Relation type" + } + } + } + } + }, + "StudentOsConfig": { + "osComment": [ + "This section contains the OpenSABER specific configuration information", + "privateFields: Optional; list of field names to be encrypted and stored in database", + "signedFields: Optional; list of field names that must be pre-signed", + "indexFields: Optional; list of field names used for creating index. Enclose within braces to indicate it is a composite index. In this definition, (serialNum, studentCode) is a composite index and studentName is a single column index.", + "uniqueIndexFields: Optional; list of field names used for creating unique index. Field names must be different from index field name", + "systemFields: Optional; list of fields names used for system standard information like created, updated timestamps and userid" + ], + "privateFields": [ + "$.identityDetails.dob", + "$.identityDetails.identityType", + "$.identityDetails.identityValue", + "$.contactDetails.email", + "$.contactDetails.mobile", + "$.contactDetails.address.plot", + "$.contactDetails.address.street", + "$.contactDetails.address.landmark", + "$.contactDetails.address.locality" + ], + "signedFields": [], + "indexFields": [ + "studentName" + ], + "uniqueIndexFields": [ + "identityValue" + ], + "systemFields": [ + "_osCreatedAt", + "_osUpdatedAt", + "_osCreatedBy", + "_osUpdatedBy", + "_osAttestedData", + "_osClaimId", + "_osState" + ], + "attestationAttributes": [ + "educationDetails", + "nationalIdentifier" + ], + "attestationPolicies": [ + { + "name": "studentInstituteAttest", + "additionalInput": { + "enrollmentNumber": { + "type": "string" + } + }, + "attestationProperties": { + "name": "$.identityDetails.fullName", + "educationDetails": "$.educationDetails" + }, + "type": "MANUAL", + "conditions": "(ATTESTOR#$.experience.[*].instituteOSID#.contains(REQUESTER#$.educationDetails.*.instituteOSID#))", + "attestorPlugin": "did:internal:ClaimPluginActor?entity=Teacher" + } + ], + "inviteRoles": [ + "anonymous" + ], + "enableLogin": true, + "ownershipAttributes": [ + { + "email": "/contactDetails/email", + "mobile": "/contactDetails/mobile", + "userId": "/contactDetails/mobile" + } + ] + }, + "IdentityDetails": { + "type": "object", + "title": "Identity Details", + "description": "Identity Details", + "required": [], + "properties": { + "fullName": { + "type": "string", + "title": "Full name" + }, + "gender": { + "type": "string", + "enum": [ + "Male", + "Female", + "Other" + ], + "title": "Gender" + }, + "dob": { + "type": "string", + "format": "date", + "title": "DOB" + }, + "identityHolder": { + "type": "object", + "properties": { + "type": { + "type": "string", + "title": "ID Type", + "enum": [ + "AADHAR", + "PAN", + "LICENSE", + "OTHER" + ] + }, + "value": { + "type": "string", + "title": "ID Value" + } + } + } + } + }, + "ContactDetails": { + "type": "object", + "title": "Contact Details", + "description": "Contact Details", + "required": [], + "properties": { + "email": { + "type": "string", + "title": "Email" + }, + "mobile": { + "type": "string", + "title": "Mobile" + }, + "address": { + "$ref": "#/definitions/Address", + "title": "Address" + } + } + }, + "AcademicQualification": { + "type": "object", + "properties": { + "instituteOSID": { + "type": "string", + "title": "Institute OSID" + }, + "instituteName": { + "type": "string", + "title": "Institute Name" + }, + "qualification": { + "type": "string", + "title": "Qualification" + }, + "program": { + "type": "string", + "title": "Program of Study" + }, + "graduationYear": { + "type": "string", + "title": "Year of Graduation" + }, + "marks": { + "type": "string", + "title": "Marks / Ranking / GPA, etc" + } + } + }, + "ExperienceType": { + "type": "object", + "properties": { + "instituteOSID": { + "type": "string", + "title": "Institute OSID" + }, + "instituteName": { + "type": "string", + "title": "Institute Name" + }, + "employmentType": { + "type": "string", + "title": "Employment Type", + "enum": [ + "Permanent", + "Contract" + ] + }, + "start": { + "type": "string", + "format": "date", + "title": "Start Date" + }, + "end": { + "type": "string", + "format": "date", + "title": "End Date" + }, + "teacherType": { + "type": "string", + "title": "Teacher Type", + "enum": [ + "Head teacher", + "Acting head teacher", + "Teacher", + "Instructor positioned as per RTE", + "Principal", + "VicePrincipal", + "Lecturer" + ] + }, + "subjectsTaught": { + "title": "Subjects Taught", + "type": "array", + "items": { + "type": "object", + "properties": { + "subjects": { + "type": "string", + "title": "Subject", + "enum": [ + "English", + "Kannada", + "Mathematics", + "Science", + "Social Science", + "Art" + ] + }, + "grades": { + "type": "string", + "title": "Grades", + "enum": [ + "Pre-Pri.", + "Class I", + "Class II", + "Class III", + "Class IV", + "Class V", + "Class VI", + "Class VII", + "Class VIII", + "Class IX", + "Class X", + "Class XI", + "Class XII" + ] + } + } + } + } + } + }, + "EducationType": { + "type": "object", + "properties": { + "institute": { + "type": "string", + "title": "Institute Name" + }, + "instituteOSID": { + "type": "string", + "title": "Institute Osid" + }, + "board": { + "type": "string", + "title": "Board of Education" + }, + "medium": { + "type": "string", + "enum": [ + "English", + "Hindi", + "Gujarati", + "Malayalam", + "Tamil" + ], + "title": "Medium of Education" + }, + "class": { + "type": "string", + "enum": [ + "Pre-Pri.", + "Class I", + "Class II", + "Class III", + "Class IV", + "Class V", + "Class VI", + "Class VII", + "Class VIII", + "Class IX", + "Class X", + "Class XI", + "Class XII" + ], + "title": "Current Enrollment Class / Std." + }, + "documents": { + "type": "array", + "items": { + "type": "object", + "properties": { + "fileName": { + "type": "string", + "format": "file" + } + } + }, + "title": "Education related documents" + } + } + }, + "GuardianDetails": { + "type": "object", + "properties": { + "fullName": { + "type": "string", + "title": "Guardian's Full Name" + }, + "relation": { + "type": "string", + "title": "Guardian Relation type" + } + } + }, + "Document": { + "type": "object", + "properties": { + "fileName": { + "type": "string", + "format": "file" + } + } + }, + "Address": { + "type": "object", + "required": [], + "properties": { + "plot": { + "type": "string", + "title": "Plot" + }, + "street": { + "type": "string", + "title": "Street" + }, + "landmark": { + "type": "string", + "title": "Landmark" + }, + "locality": { + "type": "string", + "title": "Locality" + }, + "state": { + "type": "string", + "title": "State", + "enum": [ + "Andaman and Nicobar Islands", + "Andhra Pradesh", + "Arunachal Pradesh", + "Assam", + "Bihar", + "Chandigarh", + "Chhattisgarh", + "Dadra and Nagar Haveli", + "Daman and Diu", + "Delhi", + "Goa", + "Gujarat", + "Haryana", + "Himachal Pradesh", + "Jammu and Kashmir", + "Jharkhand", + "Karnataka", + "Kerala", + "Ladakh", + "Lakshadweep", + "Madhya Pradesh", + "Maharashtra", + "Manipur", + "Meghalaya", + "Mizoram", + "Nagaland", + "Odisha", + "Puducherry", + "Punjab", + "Rajasthan", + "Sikkim", + "Tamil Nadu", + "Telangana", + "Tripura", + "Uttar Pradesh", + "Uttarakhand", + "West Bengal" + ] + }, + "district": { + "type": "string", + "title": "District" + }, + "village": { + "type": "string", + "title": "Village/Town/City" + }, + "pincode": { + "type": "string", + "title": "Pincode" + } + } + } + } + } \ No newline at end of file diff --git a/src/assets/config/test.json b/src/assets/config/test.json new file mode 100644 index 0000000..160656a --- /dev/null +++ b/src/assets/config/test.json @@ -0,0 +1,88 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema", + "type": "object", + "properties": { + "Prerak": { + "$ref": "#/definitions/Prerak" + } + }, + "required": [ + "Prerak" + ], + "title": "Prerak", + "definitions": { + "Prerak": { + "$id": "#/properties/Prerak", + "type": "object", + "title": "The Prerak Schema", + "required": [], + "properties": { + "fullName": { + "$id": "#/properties/fullName", + "type": "string", + "title": "Full name" + }, + "mobile": { + "$id": "#/properties/mobile", + "type": "string", + "title": "Mobile" + }, + "sourcingChannel": { + "$id": "#/properties/sourcingChannel", + "type": "string", + "title": "Sourcing Channel" + }, + "referrerIfApplicable": { + "$id": "#/properties/referrerIfApplicable ", + "type": "string", + "title": "Referrer (if Applicable) " + }, + "referenceId": { + "$id": "#/properties/referenceId", + "type": "string", + "title": "Reference ID" + }, + "gender": { + "$id": "#/properties/gender", + "type": "string", + "enum": [ + "Male", + "Female", + "Other" + ], + "title": "Gender" + }, + "age": { + "$id": "#/properties/age", + "type": "string", + "$comment": "Age", + "title": "Age" + }, + "typeOfPastExp": { + "$id": "#/properties/typeOfPastExp", + "type": "string", + "title": "Type of past experience" + }, + "durationOfPastExp": { + "$id": "#/properties/durationOfPastExp", + "type": "string", + "title": "Years/Months of past experience" + } + } + } + }, + "_osConfig": { + "ownershipAttributes": [ + { + "email": "", + "mobile": "/mobile", + "userId": "/mobile" + } + ], + "inviteRoles": [ + "anonymous" + ], + "enableLogin": true + } + } + \ No newline at end of file diff --git a/src/assets/config/ui-config/forms.json b/src/assets/config/ui-config/forms.json new file mode 100644 index 0000000..3ffb875 --- /dev/null +++ b/src/assets/config/ui-config/forms.json @@ -0,0 +1,593 @@ +{ + "type": "opensaberLayoutSchema", + "version": "0.1", + "forms": [ + { + "prerak-signup": { + "api": "/Prerak/invite", + "type": "entity", + "formclass": "row", + "header": "default", + "title": "REGISTER", + "isSignupForm": "true", + "langKey": "prerakStudent", + "fieldsets": [ + { + "definition": "Prerak", + "fields": [ + { + "name": "fullName", + "required": true, + "validation": { + "pattern": "^[a-zA-Z]+ [a-zA-Z]+$", + "message": "NAME_NOT_VALID" + } + }, + { + "name": "mobile", + "required": true, + "validation": { + "pattern": "[6-9]{1}[0-9]{9}", + "message": "MOBILE_NO_MUST_10_DIGIT" + } + }, + { + "name": "t&c", + "custom": true, + "element": { + "title": "ACCEPT_TERMS_CONDITIONS", + "widget": { + "formlyConfig": { + "type": "checkbox", + "fieldGroupClassName": "controls", + "className": "checkbox", + "templateOptions": { + "required": true + } + } + } + } + } + ] + } + ], + "redirectTo": "/profile/prerak" + } + }, + { + "prerak-setup": { + "api": "/Prerak", + "type": "entity", + "redirectTo": "/profile/prerak", + "langKey": "prerakStudent", + "fieldsets": [ + { + "definition": "Prerak", + "privacyConfig": "PrerakOsConfig", + "globalPrivacyConfig": "internal-access", + "fields": [ + { + "name": "fullName", + "required": true, + "validation": { + "pattern": "^[a-zA-Z]+ [a-zA-Z]+$", + "message": "NAME_NOT_VALID" + } + }, + { + "name": "mobile", + "required": true, + "validation": { + "pattern": "[6-9]{1}[0-9]{9}", + "message": "MOBILE_NO_MUST_10_DIGIT" + } + }, + { + "name": "qualification" + }, + { + "name": "gender" + }, + { + "name": "age" + }, + { + "name": "address" + }, + { + "name": "sourcingChannel" + }, + { + "name": "referrerIfApplicable" + }, + { + "name": "referenceId" + }, + { + "name": "typeOfPastExp" + }, + { + "name": "durationOfPastExp" + }, + { + "name": "candidateStatus" + }, + { + "name": "vfsMemberName" + }, + { + "name": "numberOfAttempts" + }, + { + "name": "callStatus" + }, + { + "name": "explainRROfPrerak" + }, + { + "name": "userInterestedRole" + }, + { + "name": "reasonForNotInterested" + }, + { + "name": "descForNotInterested" + }, + { + "name": "confirmName" + }, + { + "name": "confirmPhoneNumber" + }, + { + "name": "confirmMobNumber" + } + + ] + } + ] + } + }, + { + "prerak-education": { + "api": "/Prerak", + "type": "property:academicQualifications", + "redirectTo": "/profile/teacher", + "langKey": "prerakStudent", + "fieldsets": [ + { + "definition": "AcademicQualification", + "privacyConfig": "AffiliationOsConfig", + "fields": [ + { + "name": "instituteName", + "required": true, + "autocomplete": { + "apiURL": "https://demo-education-registry.xiv.in/registry/api/v1/Institute/search", + "body": { + "filters": { + "instituteName": { + "contains": "{{value}}" + }, + "instituteAffiliation._osState": { + "eq": "PUBLISHED" + } + }, + "limit": 20, + "offset": 0 + }, + "responseKey": "instituteName" + }, + "autofill": { + "apiURL": "https://demo-education-registry.xiv.in/registry/api/v1/Institute/search", + "method": "POST", + "body": { + "filters": { + "instituteName": { + "contains": "{{value}}" + }, + "instituteAffiliation._osStatus": "PUBLISHED" + }, + "limit": 20, + "offset": 0 + }, + "fields": [ + { + "instituteOSID": "osid" + } + ] + } + }, + { + "name": "qualification", + "required": true + }, + { + "name": "program" + }, + { + "name": "graduationYear", + "required": true + }, + { + "name": "marks" + } + ] + } + ] + } + }, + { + "teacher-experience": { + "api": "/Prerak", + "type": "property:experience", + "redirectTo": "/profile/prerak", + "langKey": "prerakStudent", + "fieldsets": [ + { + "definition": "ExperienceType", + "privacyConfig": "AffiliationOsConfig", + "fields": [ + { + "name": "instituteName", + "required": true, + "autocomplete": { + "apiURL": "https://demo-education-registry.xiv.in/registry/api/v1/Institute/search", + "body": { + "filters": { + "instituteName": { + "contains": "{{value}}" + }, + "instituteAffiliation._osState": { + "eq": "PUBLISHED" + } + }, + "limit": 20, + "offset": 0 + }, + "responseKey": "instituteName" + }, + "autofill": { + "apiURL": "https://demo-education-registry.xiv.in/registry/api/v1/Institute/search", + "method": "POST", + "body": { + "filters": { + "instituteName": { + "contains": "{{value}}" + } + }, + "limit": 20, + "offset": 0 + }, + "fields": [ + { + "instituteOSID": "osid" + } + ], + "dropdowns": [ + { + "grades": "affiliation[0].classes" + } + ] + } + }, + { + "name": "employmentType", + "required": true + }, + { + "name": "start", + "required": true, + "type": "date", + "validation": { + "future": false + } + }, + { + "name": "end", + "type": "date", + "validation": { + "greaterThan": "start", + "message": "END_DATE_GREATER_THAN_START_DATE" + } + }, + { + "name": "teacherType", + "required": true + }, + { + "name": "subjectsTaught", + "type": "repeat" + }, + { + "name": "attest", + "custom": true, + "element": { + "title": "SEND_FOR_ATTENSTATION", + "widget": { + "formlyConfig": { + "type": "checkbox", + "fieldGroupClassName": "controls", + "className": "checkbox", + "templateOptions": { + "required": true + } + } + } + } + }, + { + "name": "notes", + "custom": true, + "element": { + "title": "NOTE", + "widget": { + "formlyConfig": { + "type": "string", + "fieldGroupClassName": "controls", + "className": "input", + "hideExpression": "!model.attest" + } + } + } + } + ] + } + ] + } + }, + { + "student-signup": { + "api": "/Student/invite", + "type": "entity", + "formclass": "row", + "header": "default", + "title": "REGISTER", + "isSignupForm": "true", + "langKey": "prerakStudent", + "fieldsets": [ + { + "definition": "Student", + "fields": [ + { + "name": "identityDetails", + "children": { + "definition": "IdentityDetails", + "title": false, + "fields": [ + { + "name": "fullName", + "required": true, + "validation": { + "pattern": "^[a-zA-Z]+ [a-zA-Z]+$", + "message": "NAME_NOT_VALID" + } + } + ] + } + }, + { + "name": "contactDetails", + "children": { + "definition": "ContactDetails", + "title": false, + "fields": [ + { + "name": "mobile", + "required": true, + "validation": { + "pattern": "[6-9]{1}[0-9]{9}", + "message": "MOBILE_NO_MUST_10_DIGIT" + } + } + ] + } + }, + { + "name": "t&c", + "custom": true, + "element": { + "title": "ACCEPT_TERMS_CONDITIONS", + "widget": { + "formlyConfig": { + "type": "checkbox", + "fieldGroupClassName": "controls", + "className": "checkbox", + "templateOptions": { + "required": true + } + } + } + } + } + ] + } + ], + "redirectTo": "/profile/prerak" + } + }, + { + "student-setup": { + "api": "/Student", + "type": "entity", + "redirectTo": "/profile/student", + "langKey": "prerakStudent", + "fieldsets": [ + { + "definition": "Student", + "privacyConfig": "StudentOsConfig", + "globalPrivacyConfig": "private-access", + "fields": [ + { + "name": "contactDetails" + }, + { + "name": "identityDetails", + "children": { + "definition": "IdentityDetails", + "title": false, + "fields": [ + { + "name": "fullName", + "required": true, + "validation": { + "pattern": "^[a-zA-Z]+ [a-zA-Z]+$", + "message": "NAME_NOT_VALID" + } + }, + { + "name": "gender" + }, + { + "name": "dob", + "required": true, + "type": "date", + "validation": { + "future": true + } + }, + { + "name": "identityHolder", + "required": true + } + ] + } + } + ] + } + ] + } + }, + { + "student-education": { + "api": "/Student", + "type": "property:educationDetails", + "redirectTo": "/profile/student", + "langKey": "prerakStudent", + "fieldsets": [ + { + "definition": "EducationType", + "privacyConfig": "AffiliationOsConfig", + "fields": [ + { + "name": "instituteOSID", + "custom": true, + "element": { + "widget": { + "formlyConfig": { + "type": "input", + "templateOptions": { + "type": "hidden" + } + } + } + } + }, + { + "name": "institute", + "required": true, + "autocomplete": { + "apiURL": "https://demo-education-registry.xiv.in/registry/api/v1/Institute/search", + "body": { + "filters": { + "instituteName": { + "contains": "{{value}}" + }, + "instituteAffiliation._osState": { + "eq": "PUBLISHED" + } + }, + "limit": 20, + "offset": 0 + }, + "responseKey": "instituteName" + }, + "autofill": { + "apiURL": "https://demo-education-registry.xiv.in/registry/api/v1/Institute/search", + "method": "POST", + "body": { + "filters": { + "instituteName": { + "contains": "{{value}}" + } + }, + "limit": 20, + "offset": 0 + }, + "fields": [ + { + "instituteOSID": "osid" + } + ], + "dropdowns": [ + { + "class": "affiliation[0].classes" + } + ] + } + }, + { + "name": "class", + "required": true + }, + { + "name": "currStudyHere", + "custom": true, + "element": { + "title": "CURRENTLY_STUDYING_HERE", + "widget": { + "formlyConfig": { + "type": "checkbox", + "fieldGroupClassName": "controls", + "className": "checkbox", + "templateOptions": { + "required": true + } + } + } + } + }, + { + "name": "documents", + "format": "file", + "multiple": true + }, + { + "name": "attest", + "custom": true, + "element": { + "title": "SEND_FOR_ATTENSTATION", + "widget": { + "formlyConfig": { + "type": "checkbox", + "fieldGroupClassName": "controls", + "className": "checkbox", + "templateOptions": { + "required": true + } + } + } + } + }, + { + "name": "notes", + "custom": true, + "element": { + "title": "NOTE", + "widget": { + "formlyConfig": { + "type": "string", + "fieldGroupClassName": "controls", + "className": "input", + "hideExpression": "!model.attest" + } + } + } + } + ] + } + ] + } + } + ] +} \ No newline at end of file diff --git a/src/assets/config/ui-config/headers.json b/src/assets/config/ui-config/headers.json new file mode 100644 index 0000000..f2126c7 --- /dev/null +++ b/src/assets/config/ui-config/headers.json @@ -0,0 +1,88 @@ +{ + "type": "opensaberLayoutSchema", + "version": "0.1", + "headers": [ + { + "default":{ + "right":[ + { + "title": "LOGIN", + "redirectTo": "/login" + } + ] + } + }, + { + "institute": { + "left": [ + { + "title": "HOME", + "redirectTo": "/profile/institute" + }, + { + "title": "ATTESTATIONS", + "redirectTo": "/institute/attestation/institute-attestation" + } + ], + "right": [ + { + "title": "LOGOUT", + "redirectTo": "/logout", + "className" : "font-weight-bold" + } + ] + } + }, + { + "prerak": { + "left": [ + { + "title": "HOME", + "redirectTo": "/profile/teacher" + } + ], + "right": [ + { + "title": "LOGOUT", + "redirectTo": "/logout", + "className" : "font-weight-bold" + } + ] + } + }, + { + "student": { + "left": [ + { + "title": "HOME", + "redirectTo": "/profile/student" + } + ], + "right": [ + { + "title": "LOGOUT", + "redirectTo": "/logout", + "className" : "font-weight-bold" + } + ] + } + }, + { + "admin": { + "left": [ + { + "title": "Prerak", + "redirectTo": "/profile/admin" + } + ], + "right": [ + { + "title": "LOGOUT", + "redirectTo": "/logout", + "className" : "font-weight-bold" + } + ] + } + } + ] +} diff --git a/src/assets/config/ui-config/layouts.json b/src/assets/config/ui-config/layouts.json new file mode 100644 index 0000000..860337a --- /dev/null +++ b/src/assets/config/ui-config/layouts.json @@ -0,0 +1,73 @@ +{ + "type": "opensaberLayoutSchema", + "version": "0.1", + "layouts": [ + + { + "prerak": { + "api": "/Prerak", + "title": "TEACHER_PROFILE", + "langKey" : "prerakStudent", + "headerName" : "fullName", + "blocks": [ + { + "definition": "Prerak", + "title": "PERSONAL_DETAILS", + "add": false, + "edit": true, + "editform":"prerak-setup", + "fields": { + "includes": ["*"], + "excludes": [] + }, + "propertyShowFirst" : [ "fullName", "mobile", "email"] + + } + ] + } + }, + { + "student": { + "api": "/Student", + "title": "STUDENT_PROFILE", + "langKey" : "teacherStudent", + "headerName" : "identityDetails.fullName", + "subHeadername" : "contactDetails.address.state,contactDetails.address.city", + "blocks": [ + { + "definition": "Student", + "title": "BASIC_DETAILS", + "add": false, + "edit": true, + "editform":"student-setup", + "fields": { + "includes": ["*"], + "excludes": ["educationDetails"] + }, + "propertyShowFirst" : [ "fullName", "mobile", "email"] + }, + { + "definition": "Student", + "title": "EDUCATION_DEATILS", + "add": true, + "addform":"student-education", + "editform":"student-education", + "edit": false, + "claimEdit": true, + "canRaiseClaim" : true, + "multiple": true, + "headValue" : "class", + "fields": { + "includes": ["educationDetails"] + } + } + ] + } + }, + { + "admin": { + "table": "admin-attestation" + } + } + ] +} diff --git a/src/assets/config/ui-config/search.json b/src/assets/config/ui-config/search.json new file mode 100644 index 0000000..7b76e5f --- /dev/null +++ b/src/assets/config/ui-config/search.json @@ -0,0 +1,140 @@ +{ + "type": "opensaberLayoutSchema", + "version": "0.1", + "header": "default", + "limit" : "5", + "searches": [ + { + "institute": { + "tab": "institute", + "tabTitle": "SEARCH_INSTITUTE", + "api": "/Institute/search", + "activeTab": "active", + "privateFields": "InstituteOsConfig", + "filters": [ + { + "key": "board", + "type": "text", + "title": "BOARD", + "propertyPath": "affiliation.board" + }, + { + "key": "instituteName", + "type": "autocomplete", + "autocomplete": { + "apiURL": "https://demo-education-registry.xiv.in/registry/api/v1/Institute/search", + "body": { + "filters": { + "instituteName": { + "startsWith": "{{value}}" + }, + "instituteAffiliation._osState": { + "eq": "PUBLISHED" + } + + }, + "limit": 20, + "offset": 0 + } + }, + + "title": "INSTITUTE_NAME", + "default": true, + "propertyPath": "instituteName", + "placeholder" : "SEARCH_BY_INSTITUTE_NAME" + }, + { + "key": "state", + "type": "text", + "title": "STATE", + "propertyPath": "address.state" + }, + { + "key": "district", + "type": "text", + "title": "DISTRICT", + "propertyPath": "address.district" + } + + ], + "results": { + "fields": [ + { + "title" : "INSTITUTE_NAME", + "property" : "instituteName" + }, + { + + "title" : "STATE", + "property" : "address.state" + }, + { + + "title" : "AFFILIATION_NUMBER", + "property" : "affiliation.affiliationNumber" , + "attest" : "_osState" + }, + { + + "title" : "AFFILIATION_CLASS", + "property" : "affiliation.classes" + } + ] + } + } + }, + { + "teacher": { + "tab": "teacher", + "tabTitle": "SEARCH_TEACHER", + "api": "/Teacher/search", + "privateFields": "TeacherOsConfig", + "filters": [ + + { + "key": "teacherName", + "type": "text", + "title": "TEACHER_NAME", + "propertyPath": "identityDetails.fullName" + }, + { + "key": "subject", + "type": "text", + "title": "SUBJECT", + "propertyPath": "experience.subjects" + }, + { + "key": "state", + "type": "text", + "title": "STATE", + "propertyPath": "contactDetails.address.state" + }, + { + "key": "district", + "type": "text", + "title": "DISTRICT", + "propertyPath": "contactDetails.address.district" + } + ], + "results": { + "fields": [ + { + "title" : "TEACHER_NAME", + "property" : "identityDetails.fullName" + }, + { + + "title" : "QUALIFICATION", + "property" : "academicQualifications.qualification" + }, + { + + "title" : "STATE", + "property" : "contactDetails.address.state" + } + ] + } + } + } + ] +} diff --git a/src/assets/config/ui-config/tables.json b/src/assets/config/ui-config/tables.json new file mode 100644 index 0000000..4b4e198 --- /dev/null +++ b/src/assets/config/ui-config/tables.json @@ -0,0 +1,91 @@ +{ + "type": "opensaberLayoutSchema", + "version": "0.1", + "limit": "15", + "tables": [ + { + "teacher-attestation": { + "api": "/Teacher/claims", + "title": "TEACHER_ATTESTATIONS", + "fields": [ + { + "name": "createdAt", + "title": "SUBMITTED_DATE", + "formate": "date" + }, + { + "name": "requestorName", + "title": "NAME" + }, + { + "custom": true, + "title": "ACTION", + "buttonText": "ATTEST", + "type": "button", + "redirectTo": "/Teacher/attestation/teacher-attestation/:id" + } + ] + } + }, + { + "institute-attestation": { + "api": "/Institute/claims", + "title": "INSTITUTE_ATTESTATIONS", + "fields": [ + { + "name": "createdAt", + "title": "SUBMITTED_DATE", + "formate": "date" + }, + { + "name": "requestorName", + "title": "NAME" + }, + { + "custom": true, + "title": "ACTION", + "type": "button", + "buttonText": "ATTEST", + "redirectTo": "/Institute/attestation/institute-attestation/:id" + } + ] + } + }, + { + "admin-attestation": { + "api": "/Prerak/search", + "title": "CBSE_BOARD_ATTESTATIONS", + "fields": [ + { + "name": "fullName", + "title": "Full Name" + }, + { + "name": "gender", + "title": "Gender" + }, + { + "name": "mobile", + "title": "Contact Number" + }, + { + "name": "qualification", + "title": "Education Details" + }, + { + "custom": true, + "type": "button", + "buttonText": "Edit", + "redirectTo": "/admin/attestation/admin-attestation/:id" + }, + { + "custom": true, + "type": "button", + "buttonText": "View", + "redirectTo": "/admin/attestation/admin-attestation/:id" + } + ] + } + } + ] +} \ No newline at end of file diff --git a/src/assets/i18n/global/en-global.json b/src/assets/i18n/global/en-global.json new file mode 100644 index 0000000..e1099a8 --- /dev/null +++ b/src/assets/i18n/global/en-global.json @@ -0,0 +1,189 @@ +{ + "LOGIN": "Login", + "LOGOUT": "Logout", + "HOME": "Home", + "INSTITUTE": "School", + "ATTESTATIONS": "Attestations", + "REGISTER": "Register", + "EMAILT_NOT_VALID": "Email is not valid.", + "WEBSITE_NOT_VALID": "Website is not valid.", + "ACCEPT_TERMS_CONDITIONS": "I accept Terms & Conditions", + "INSTITUTE_SETUP": "School Setup", + "BASIC_DETAILS": "Basic details", + "GSTIN_NOT_VALID": "GSTIN is not valid. Ex: 06BZAHM6385P6Z2", + "NAME_NOT_VALID": "Name is not valid.", + "AFFLILIATION_DETAILS": "Affiliation Details", + "YEAR_NOT_VALID": "Year is not valid. Ex: 2016", + "YEAR_MUST_LESS_GRANT_YEAR": "Year must be less than Grant year", + "SEND_FOR_ATTENSTATION": "Send for attestation?", + "MOBILE_NO_MUST_10_DIGIT": "Mobile Number must be 10 digit number.", + "END_DATE_GREATER_THAN_START_DATE": "End date must be greater than start date", + "yes" : "yes", + "No" : "No", + "GUARDIAN_FULL_NAME": "Guardian's Full Name", + "GUARDIAN_RELATION_TYPE": "Guardian's Relation type", + "ARE_YOU_ABOVE_13": "Are you above 13?", + "AS_PER_AADHAAR_ID": "as per ID(Aadhaar)", + "CURRENTLY_STUDYING_HERE": "Currently studying here", + "CBSE_BOARD": "CBSE Board", + "VISIBILITY_ATTRIBUTE_DEFINE": "(Visibility Attribute Define)", + "DATE_MUST_BIGGER_TO_TODAY_DATE": "The Date must be Bigger or Equal to today date", + "INSTITUTE_PROFILE": "School Profile", + "INSTITUTE_DEATILS": "School details", + "AFFILIATION_DETAILS": "Affiliation details", + "TEACHER_PROFILE": "Prerak Profile", + "PERSONAL_DETAILS": "Personal details", + "PROFESSIONAL_EXPERIENCE": "Professional Experience", + "STUDENT_PROFILE": "Student Profile", + "EDUCATION_DEATILS": "Education details", + "SEARCH_INSTITUTE": "Search School", + "BOARD": "Board", + "INSTITUTE_NAME": "School Name", + "SEARCH_BY_INSTITUTE_NAME": "Search by School name", + "DISTRICT": "District", + "PINCODE": "Pincode", + "AFFILIATION_NUMBER": "Affiliation Number", + "AFFILIATION_CLASS": "Affiliation Classes", + "SEARCH_TEACHER": "Search Prerak", + "TEACHER_NAME": "Prerak Name", + "SUBJECT": "Subject", + "QUALIFICATION": "Qualification", + "TEACHER_ATTESTATIONS": "Prerak Attestations", + "INSTITUTE_ATTESTATIONS": "School Attestations", + "SUBMITTED_DATE": "Submitted Date", + "ACTION": "Action", + "CBSE_BOARD_ATTESTATIONS": "Prerak List", + "ATTEST": "Attest", + "VIEW_CERTIFICATE": "View Certificate", + "CERTIFICATES": "Certificates", + "MY_CERTIFICATE": "My Certificates", + "ISSUED_BY": "Issued by", + "ADD": "Add", + "ENROLL": "Enroll", + "ISSUE_CERTIFICATE": "Issue Certificate", + "NAME": "Name", + "CREATE": "Create", + "COURSE_NAME": "Course Name", + "SEARCH": "Search", + "RESET": "Reset", + "DATA_NOT_FOUND": "Data Not Found!", + "LOADING": "Loading...", + "PUBLIC_PROFILE": "Public Profile", + "FILTER_NOT_AVAILABLE": "Filter Not Available", + "UNSELECT_ALL": "Unselect All", + "SELECT_ALL": "Select All", + "SELECT_FILTER": "Select filter", + "UPLOAD": "Upload", + "MY_DOCUMENTS": "My Documents", + "COUNTRY_ID_CARD": "Country ID Card", + "ISSUED_NAME": "Issued Name", + "SELECT_ISSUER_TO_FETCH_DOCUMENTS": "Select Issuer to fetch documents", + "YOUR_DOCUMENTS_WILL_BE_VERIFIED_BY_THE_ISSUER_SELECTED": "Your documents will be verified by the issuer selected", + "STATE": "State", + "BOARD_OF_EXAMINATION": "Board of Examination", + "STATE_NAME": "State Name", + "DIGITAL_VERIFICATION_SUPPORTED": "Digital Verification Supported", + "ALL": "All", + "BROWSE_ISSUED_DOCUMENTS": "Browse Issued Documents", + "BY_CATEGORY": "By Category", + "BY_STATE": "By State", + "SELECT_AND_DOWNLOAD_ISSUED_DOCUMENTS": "Select and download issued documents", + "EDUCATION": "Education", + "VIEW_ALL": "View All", + "CLASS_10_CERTIFICATE": "Class 10 Certificate", + "CLASS_12_CERTIFICATE": "Class 12 Certificate", + "HEALTH": "Health", + "EMPLOYMENT": "Employment", + "PRIVATE": "Private", + "GOVERNMENT": "Government", + "FINANCE": "Finance", + "BANKING": "Banking", + "INSURANCE": "Insurance", + "VEHICLE": "Vehicle", + "DRIVING_LICENCE": "Driving Licence", + "REGISTRATION": "Registration", + "PUC": "PUC", + "OTHERS": "Others", + "RESIDENCE": "Residence", + "MARRIAGE_CERTIFICATE": "Marriage Certificate", + "REMOVE": "Remove", + "SUBMIT": "Submit", + "VISIBILITY": "Visibility", + "PRIVACY_ATTRIBUTE_DEFINE": "Privacy Attribute Define", + "ALREADY_REGISTERED_LOGIN": "Already Registered? Login", + "WELCOME_TO_SUNBIRD_RC": "Welcome to Sunbird RC", + "LEARN_MORE_ON_GITHUB": "Learn More on github", + "FILE_AS_PER_YOUR_NEED_AND_PLACE_IT_INSIDE": "file as per your need and place it inside", + "TO_CHANGE_THIS_PAGE": "to change this page", + "INSTALLATION": "Installation", + "INSTALL": "Install", + "INSTALLATION_COMPLETED": "Installation Completed", + "ADD_DOWNLOADED": "Add downloaded", + "FILE_TO": "file to", + "FOLDER_TO_COMPLETE_INITIAL_CONFIGURATION": "folder to complete initial configuration", + "I_HAVE_YOU_ADDED_THE_CONFIG_FILE": "I have you added the config file", + "FINISH": "Finish", + "WHAT_IS_YOUR_PROJECT_NAME": "What is your project name", + "SELECT_ENVIRONMENT": "Select environment", + "DEVELOPMENT": "Development", + "PRODUCTION": "Production", + "WHAT_IS_YOUR_BASE_API_URL": "What is your base API URL", + "WHAT_IS_YOUR_SCHEMA_URL": "What is your schema URL", + "AUTHENTICATION_SERVICE_CONFIGURATIONS": "Authentication service configurations", + "READ_CONFIG_FILES(forms.json,etc.)_FROM_WHICH_FOLDER": "Read config files(forms.json,etc.) from which folder", + "WHAT_IS_THE_PATH_OF_LOGO_FILE": "what is the path of logo file", + "TEXT_ON_FOOTER": "Text on footer", + "ISSUE": "Issue", + "CERTIFICATE_IS_ISSUED_SUCCESSFULLY": "Certificate is issued successfully", + "ADD_DETAILS": "Add Details", + "EDIT_DETAILS": "Edit Details", + "PREVIEW_PUBLIC_PROFILE": "Preview Public Profile", + "EDIT": "edit", + "DRAFT": "Draft", + "NO_DATA_FOUND": "No Data Found", + "PROFILE": "profile", + "ATTEST_DETAILS": "Attest Details", + "ATTESTATION_CLAIM_OF": "Attestation Claim of", + "REVIEW_AND_ATTEST_CLAIM": "Review and attest claim", + "DOCUMENT": "Document", + "NOTE_ADDED": "Note Added!", + "PUBLIC_PROFILE_OF": "Public Profile of", + "APPROVE": "Approve", + "DENY": "Deny", + "CANCEL": "Cancel", + "YES_DENY": "Yes, Deny", + "BY": "By", + "SAVE_NOTE": "Save note", + "REASON_FOR_DENIAL": "Reason for denial", + "THIS_NOTE_WILL_BE_SENT_TO_USER": "This note will be sent to user", + "TYPE_MESSAGE_HERE": "Type message here", + "NOTE": "Note", + "NOTE_SENT_ON_USER": "note sent on user", + "INVITE": "Invite", + "COMMENTS": "Comments", + "ADD_A_COMMENT": "Add a Comment", + "SAVE": "Save", + "NO_RECORDS_FOUND": "No Records Found!", + "VERIFY_A_CERTIFICATE": "Verify a certificate", + "SCAN_QR_CODE": "Scan QR code", + "STOP_SCANNER": "StopScanner", + "THIS_CERTIFICATE_IS_VALID": "This Certificate is valid", + "THIS_CERTIFICATE_IS_NOT_VALID": "This Certificate is not valid", + "SOMETHING_WENT_WRONG_WITH_SCHEMA_URL": "Something went wrong with Schema URL or Path not found", + "ATTESTATION_REQUESTED": "Attestation Requested", + "SAVED_TO_DRAFT": "Saved to DRAFT", + "PUBLISHED": "Published", + "SELECT": "Select", + "PREVIOUS": "Privious", + "NEXT": "Next", + "FIELD_IS_REQUIRED": "This field is required", + "UPLOAD_FILE":"+ Upload File", + "ONLY_BY_CONSENT": "Only by consent", + "ONLY_BY_ME" :"Only by me", + "ANYONE" : "Anyone", + "SOMETHING_WENT_WRONG": "Something went wrong while uploading files, please try again", + "DEMO":"This is a demo of the Education Portal. Check documentation", + "HERE" : "here" + + +} diff --git a/src/assets/i18n/global/hi-global.json b/src/assets/i18n/global/hi-global.json new file mode 100644 index 0000000..b03f06d --- /dev/null +++ b/src/assets/i18n/global/hi-global.json @@ -0,0 +1,188 @@ +{ + + "LOGIN": "लॉग इन", + "LOGOUT": "लॉगआउट", + "HOME": "होम", + "Yes" : "हां", + "ATTESTATIONS": "प्रमाणीकरण", + "REGISTER": "रजिस्टर", + "EMAILT_NOT_VALID": "ईमेल मान्य नहीं है।", + "WEBSITE_NOT_VALID": "वेबसाइट मान्य नहीं है।", + "ACCEPT_TERMS_CONDITIONS": "मुझे नियम और शर्तें स्वीकार हैं", + "INSTITUTE_SETUP": "संस्थान सेटअप", + "BASIC_DETAILS": "मूल विवरण", + "GSTIN_NOT_VALID": "GSTIN मान्य नहीं है। उदा: 06BZAHM6385P6Z2", + "NAME_NOT_VALID": "नाम मान्य नहीं है।", + "AFFLILIATION_DETAILS": "संबद्धता विवरण", + "YEAR_NOT_VALID": "वर्ष मान्य नहीं है। उदाहरण: 2016", + "YEAR_MUST_LESS_GRANT_YEAR": "वर्ष अनुदान वर्ष से कम होना चाहिए", + "SEND_FOR_ATTENSTATION": "सत्यापन के लिए भेजें?", + "MOBILE_NO_MUST_10_DIGIT": "मोबाइल नंबर 10 अंकों का होना चाहिए।", + "END_DATE_GREATER_THAN_START_DATE": "समाप्ति तिथि प्रारंभ तिथि से बड़ी होनी चाहिए", + "yes" : "हाँ", + "No" : "नहीं", + "GUARDIAN_FULL_NAME": "अभिभावक का पूरा नाम", + "GUARDIAN_RELATION_TYPE": "अभिभावक का संबंध प्रकार", + "ARE_YOU_ABOVE_13": "क्या आप 13 साल से ऊपर हैं?", + "AS_PER_AADHAAR_ID": "आईडी (आधार) के अनुसार", + "CURRENTLY_STUDYING_HERE": "वर्तमान में यहां पढ़ रहे ह", + "CBSE_BOARD": "सीबीएसई बोर्ड", + "VISIBILITY_ATTRIBUTE_DEFINE": "(दृश्यता विशेषता परिभाषित)", + "INSTITUTE_PROFILE": "संस्थान प्रोफ़ाइल", + "INSTITUTE_DEATILS": "संस्थान विवरण", + "AFFILIATION_DETAILS": "संबद्धता विवरण", + "TEACHER_PROFILE": "शिक्षक प्रोफ़ाइल", + "PERSONAL_DETAILS": "व्यक्तिगत विवरण", + "PROFESSIONAL_EXPERIENCE": "पेशेवर अनुभव", + "STUDENT_PROFILE": "विद्यार्थी प्रोफ़ाइल", + "EDUCATION_DEATILS": "शिक्षा विवरण", + "SEARCH_INSTITUTE": "खोज संस्थान", + "BOARD": "बोर्ड", + "INSTITUTE_NAME": "संस्थान का नाम", + "DISTRICT": "जिला", + "PINCODE": "पिन कोड", + "AFFILIATION_NUMBER": "संबद्धता संख्या", + "AFFILIATION_CLASS": "संबद्धता वर्ग", + "SEARCH_TEACHER": "शिक्षक खोज", + "TEACHER_NAME": "शिक्षक का नाम", + "SUBJECT": "विषय", + "QUALIFICATION": "योग्यता", + "TEACHER_ATTESTATIONS": "शिक्षक सत्यापन", + "INSTITUTE_ATTESTATIONS": "संस्थान प्रमाणन", + "SUBMITTED_DATE": "सबमिट की गई तिथि", + "ACTION": "कार्रवाई", + "CBSE_BOARD_ATTESTATIONS": "CBSE बोर्ड सत्यापन", + "ATTEST": "प्रमाणित कर", + "VIEW_CERTIFICATE": "प्रमाणपत्र देखें", + "CERTIFICATES": "प्रमाणपत्र", + "MY_CERTIFICATE": "मेरे प्रमाणपत्र", + "ISSUED_BY": "द्वारा जारी किया गया", + "ADD": "जोड़ें", + "ENROLL": "नामांकन करें", + "ISSUE_CERTIFICATE": "जारी प्रमाणपत्र", + "NAME": "नाम", + "CREATE": "बनाएँ", + "COURSE_NAME": "पाठ्यक्रम का नाम", + "SEARCH": "खोज", + "RESET": "रीसेट", + "DATA_NOT_FOUND": "डेटा नहीं मिला!", + "LOADING": "लोड हो रहा है...", + "PUBLIC_PROFILE": "सार्वजनिक प्रोफ़ाइल", + "FILTER_NOT_AVAILABLE": "फ़िल्टर उपलब्ध नहीं है", + "UNSELECT_ALL": "सभी को अचयनित कर", + "SELECT_ALL": "सभी का चयन कर", + "SELECT_FILTER": "फ़िल्टर चुन", + "UPLOAD": "अपलोड करें", + "MY_DOCUMENTS": "मेरे दस्तावेज़", + "COUNTRY_ID_CARD": "देश का आईडी कार्ड", + "ISSUED_NAME": "जारी किया गया नाम", + "SELECT_ISSUER_TO_FETCH_DOCUMENTS": "दस्तावेज़ लाने के लिए जारीकर्ता चुन", + "YOUR_DOCUMCERTIFICATE_IS_ISSUED_SUCCESSFULLYENTS_WILL_BE_VERIFIED_BY_THE_ISSUER_SELECTED": "आपके दस्तावेज़ चयनित जारीकर्ता द्वारा सत्यापित किए जाएंग", + "STATE": "राज्य", + "BOARD_OF_EXAMINATION": "परीक्षा बोर्ड", + "STATE_NAME": "राज्य का नाम", + "DIGITAL_VERIFICATION_SUPPORTED": "डिजिटल सत्यापन समर्थित", + "ALL": "सब", + "BROWSE_ISSUED_DOCUMENTS": "जारी किए गए दस्तावेज़ ब्राउज़ करें", + "BY_CATEGORY": "श्रेणी के अनुसार", + "BY_STATE": "राज्य द्वारा", + "SELECT_AND_DOWNLOAD_ISSUED_DOCUMENTS": "जारी किए गए दस्तावेज़ चुनें और डाउनलोड करें", + "EDUCATION": "शिक्षा", + "VIEW_ALL": "सभी देख", + "CLASS_10_CERTIFICATE": "कक्षा 10 प्रमाणपत्र", + "CLASS_12_CERTIFICATE": "कक्षा 12 प्रमाणपत्र", + "HEALTH": "स्वास्थ्य", + "EMPLOYMENT": "रोजगार", + "PRIVATE": "निजी", + "GOVERNMENT": "सरकार", + "FINANCE": "वित्त", + "BANKING": "बैंकिंग", + "INSURANCE": "बीमा", + "VEHICLE": "वाहन", + "DRIVING_LICENCE": "ड्राइविंग लाइसेंस", + "REGISTRATION": "पंजीकरण", + "PUC": "पीयूसी", + "OTHERS": "अन्य", + "RESIDENCE": "निवास", + "MARRIAGE_CERTIFICATE": "विवाह प्रमाणपत्र", + "REMOVE": "निकालें", + "SUBMIT": "सबमिट करें", + "VISIBILITY": "दृश्यता", + "PRIVACY_ATTRIBUTE_DEFINE": "गोपनीयता विशेषता परिभाषित कर", + "ALREADY_REGISTERED_LOGIN": "पहले से रजिस्टर्ड है? लॉगिन", + "NOTES": "नोट्स", + "WELCOME_TO_SUNBIRD_RC": "Sunbird RC में आपका स्वागत ह", + "LEARN_MORE_ON_GITHUB": "github पर अधिक जानें", + "FILE_AS_PER_YOUR_NEED_AND_PLACE_IT_INSIDE": "अपनी आवश्यकता के अनुसार फ़ाइल करें और उसे अंदर रख", + "TO_CHANGE_THIS_PAGE": "इस पेज को बदलने के लिए", + "INSTALLATION": "स्थापना", + "INSTALL": "इंस्टॉल कर", + "INSTALLATION_COMPLETED": "इंस्टॉलेशन पूर्ण", + "ADD_DOWNLOADED": "डाउनलोड किया गया जोड़ें", + "FILE_TO": "इसमें फ़ाइल करें", + "FOLDER_TO_COMPLETE_INITIAL_CONFIGURATION": "प्रारंभिक कॉन्फ़िगरेशन पूर्ण करने के लिए फ़ोल्डर", + "I_HAVE_YOU_ADDED_THE_CONFIG_FILE": "मैंने आपने कॉन्फ़िग फ़ाइल जोड़ ली ह", + "FINISH": "फिनिश", + "WHAT_IS_YOUR_PROJECT_NAME": "आपके प्रोजेक्ट का नाम क्या है", + "SELECT_ENVIRONMENT": "पर्यावरण चुन", + "DEVELOPMENT": "विकास", + "PRODUCTION": "उत्पादन", + "WHAT_IS_YOUR_BASE_API_URL": "आपका मूल API URL क्या ह", + "WHAT_IS_YOUR_SCHEMA_URL": "आपका स्कीमा URL क्या ह", + "AUTHENTICATION_SERVICE_CONFIGURATIONS": "प्रमाणीकरण सेवा कॉन्फ़िगरेशन", + "READ_CONFIG_FILES(forms.json,etc.)_FROM_WHICH_FOLDER": "किस फोल्डर से कॉन्फिग फाइल्स (फॉर्म्स.जेसन, आदि) पढ़", + "WHAT_IS_THE_PATH_OF_LOGO_FILE": "लोगो फ़ाइल का पथ क्या ह", + "TEXT_ON_FOOTER": "पाद पर लेख", + "ISSUE": "मुद्दा", + "CERTIFICATE_IS_ISSUED_SUCCESSFULLY": "प्रमाण पत्र सफलतापूर्वक जारी किया गया", + "ADD_DETAILS": "विवरण जोड़ें", + "EDIT_DETAILS": "विवरण संपादित करें", + "PREVIEW_PUBLIC_PROFILE": "सार्वजनिक प्रोफ़ाइल का पूर्वावलोकन करें", + "EDIT": "संपादित करें", + "DRAFT": "ड्राफ्ट", + "NO_DATA_FOUND": "कोई डेटा नहीं मिला", + "PROFILE": "प्रोफाइल", + "ATTEST_DETAILS": "विवरण सत्यापित करें", + "ATTESTATION_CLAIM_OF": "प्रमाणीकरण का दावा", + "REVIEW_AND_ATTEST_CLAIM": "समीक्षा करें और दावा प्रमाणित करें", + "DOCUMENT": "नोट जोड़ा गया!", + "NOTE_ADDED": "नोट जोड़ा गया!", + "PUBLIC_PROFILE_OF": "सार्वजनिक प्रोफ़ाइल", + "APPROVE": "स्वीकार करें", + "DENY": "अस्वीकार करें", + "CANCEL": "रद्द करें", + "YES_DENY": "हां, इनकार करें", + "BY": "द्वारा", + "SAVE_NOTE": "नोट सहेजें", + "REASON_FOR_DENIAL": "अस्वीकार करने का कारण", + "THIS_NOTE_WILL_BE_SENT_TO_USER": "यह नोट उपयोगकर्ता को भेजा जाएगा", + "TYPE_MESSAGE_HERE": "यहां संदेश लिखें", + "NOTE": "नोट", + "NOTE_SENT_ON_USER": "उपयोगकर्ता को नोट भेजा गया", + "INVITE": "आमंत्रित करें", + "COMMENTS": "टिप्पणियाँ", + "ADD_A_COMMENT": "एक टिप्पणी जोड़ें", + "SAVE": "सहेजें", + "NO_RECORDS_FOUND": "कोई रिकॉर्ड नहीं मिला!", + "VERIFY_A_CERTIFICATE": "एक प्रमाणपत्र सत्यापित करें", + "SCAN_QR_CODE": "QR कोड स्कैन करें", + "STOP_SCANNER": "StopScanner", + "THIS_CERTIFICATE_IS_VALID": "यह प्रमाणपत्र मान्य है", + "THIS_CERTIFICATE_IS_NOT_VALID": "यह प्रमाणपत्र मान्य नहीं है", + "ATTESTATION_REQUESTED": "प्रमाणीकरण विनंती", + "SAVED_TO_DRAFT": "DRAFT मध्ये सेव्ह केले", + "PUBLISHED": "प्रकाशित", + "SELECT": "चयन करें", + "PREVIOUS": "प्रिविअस", + "NEXT": "अगला", + "FIELD_IS_REQUIRED": "यह फ़ील्ड आवश्यक है", + "UPLOAD_FILE":"+ अपलोडिंग", + "ONLY_BY_CONSENT": "केवल सहमति से", + "ONLY_BY_ME" :"केवल मेरे द्वारा", + "ANYONE" : "कोई भी", + "SOMETHING_WENT_WRONG": "फ़ाइल अपलोड करते समय कुछ गलत हुआ, कृपया पुनः प्रयास करें", + "DEMO":"यह एजुकेशन पोर्टल का डेमो है। दस्तावेज़ीकरण की जाँच करें", + "HERE" : "यहां" + + +} diff --git a/src/assets/i18n/local/en-local.json b/src/assets/i18n/local/en-local.json new file mode 100644 index 0000000..54c4321 --- /dev/null +++ b/src/assets/i18n/local/en-local.json @@ -0,0 +1,121 @@ +{ + "institute": { + "instituteName": "School Name", + "email": "Email", + "plot": "Plot", + "street": "Street", + "landmark": "Landmark", + "locality": "Locality", + "state": "State", + "district": "District", + "village": "Village/Town/City", + "pincode": "Pincode", + "establishmentYear": "Year of establishment of School", + "gstnId": "GSTN ID", + "contactNumber": "Landline / Mobile", + "website": "Website", + "category": "School Category (Primary/Secondary etc)", + "Primary": "Primary", + "Secondary": "Secondary", + "schoolType": "School Type", + "Boys": "Boys", + "Girls": "Girls", + "Co-ed": "Co-ed", + "instituteManagement": "Management of School", + "committee": "Name of Trust / Society / Managing Committee", + "adminName": "Principal / Dean / Head - Full Name", + "adminEmail": "Principal / Dean / Head - Email", + "adminMobile": "Principal / Dean / Head - Mobile", + "affiliation": "Affiliation", + "English": "English", + "Hindi": "Hindi", + "Gujarati": "Gujarati", + "Malayalam": "Malayalam", + "Tamil": "Tamil", + "board": "Affiliations Board", + "affiliationNumber": "Affiliation Number", + "grantYear": "Grant year", + "expiryYear": "Expiry Year", + "Pre-Pri.": "Pre-Pri.", + "Class I": "Class I", + "Class II": "Class II", + "Class III": "Class III", + "Class IV": "Class IV", + "Class V": "Class V", + "Class VI": "Class VII", + "Class VIII": "Class VIII", + "Class IX": "Class IX", + "Class X": "Class X", + "Class XI": "Class XI", + "Class XII": "Class XII", + "classes": "Classes / Grades", + "medium": "Medium of Education", + "address": "Address" + }, + "prerakStudent": { + "employeeName": "Employee Full name", + "instituteName": "School Name", + "fullName": "Full name", + "gender": "Gender", + "Male": "Male", + "Female": "Female", + "Other": "Other", + + "plot": "Plot", + "street": "Street", + "landmark": "Landmark", + "locality": "Locality", + "state": "State", + "district": "District", + "village": "Village/Town/City", + "pincode": "Pincode", + "dob": "DOB", + "type": "ID Type", + "value": "ID Value", + "AADHAR": "AADHAR", + "PAN": "PAN", + "LICENSE": "LICENSE", + "OTHER": "OTHER", + "mobile": "Mobile", + "instituteOSID": "School OSID", + "qualification": "Qualification", + "program": "Program of Study", + "graduationYear": "Year of Graduation", + "marks": "Marks / Ranking / GPA, etc", + "academicQualifications": "Education Details", + "identityDetails": "Identity Details", + "contactDetails": "Contact Details", + "employmentType": "Employment Type", + "Permanent": "Permanent", + "Contract": "Contract", + "start": "Start Date", + "end": "End Date", + "teacherType": "Teacher Type", + "Acting head teacher": "Acting head teacher", + "Instructor positioned as per RTE": "Instructor positioned as per RTE", + "Principal": "Principal", + "VicePrincipal": "VicePrincipal", + "Lecturer": "Lecturer", + "subjectsTaught": "Subjects Taught", + "subjects": "Subject", + "Kannada": "Kannada", + "Mathematics": "Mathematics", + "Science": "Science", + "Social Science": "Social Science", + "Art": "Art", + "grades": "Grades", + "class": "Current Enrollment Class / Std.", + "fileName": "Education related documents", + "Head teacher":"Head teacher", + "Teacher": "Teacher", + + "institute":"School Name", + "board":"Board of Education", + "documents": "Education related documents", + "educationDetails" : "Education related documents", + "AS_PER_AADHAAR_ID": "as per ID(Aadhaar)", + "Yes" : "Yes", + "No" : "No" + + } +} \ No newline at end of file diff --git a/src/assets/i18n/local/hi-local.json b/src/assets/i18n/local/hi-local.json new file mode 100644 index 0000000..a66dec1 --- /dev/null +++ b/src/assets/i18n/local/hi-local.json @@ -0,0 +1,139 @@ +{ + + "institute": { + "plot": "प्लॉट", + "street": "सडक", + "landmark": "ल्यान्डमार्क", + "locality": "स्थान", + "state": "राज्य", + "district": "जिल्ला", + "village": "गाउँ/नगर/शहर", + "pincode": "पिनकोड", + "instituteName": "संस्थान का नाम", + "establishmentYear": "संस्था स्थापना वर्", + "gstnId": "GSTN ID", + "contactNumber": "ल्याण्डलाइन / मोबाइल", + "email": "इमेल", + "website": "वेबसाइट", + "category": "संस्था वर्ग (प्राथमिक/माध्यमिक आदि)", + "Primary": "प्राथमिक", + "Secondary": "माध्यमिक", + "schoolType": "विद्यालयको प्रकार", + "Boys": "लड़के", + "Girls": "लड़कियाँ", + "Co-ed": "Co-ed", + "instituteManagement": "संस्थान का प्रबंधन", + "committee": "ट्रस्ट/सोसाइटी/प्रबंध समिति का नाम", + "adminName": "प्रिंसिपल / डीन / हेड - पूरा नाम", + "adminEmail": "प्रिंसिपल / डीन / हेड - ईमेल", + "adminMobile": "प्रिंसिपल / डीन / हेड - मोबाइल", + "affiliation": "संबद्धता", + "English": "अंग्रेजी", + "Hindi": "हिंदी", + "Gujarati": "गुजराती", + "Malayalam": "मलयालम", + "Tamil": "तमिल", + "board": "संबद्धता बोर्ड", + "affiliationNumber": "संबद्धता संख्या", + "grantYear": "अनुदान वर्ष", + "expiryYear": "एक्सपायरी ईयर", + "Pre-Pri.": "प्री प्राइमरी", + "Class I": "कक्षा I", + "Class II": "कक्षा II", + "Class III": "कक्षा III", + "Class IV": "कक्षा IV", + "Class V": "कक्षा V", + "Class VI": "कक्षा VI", + "Class VII": "कक्षा VII", + "Class VIII": "कक्षा VIII", + "Class IX": "कक्षा IX", + "Class X": "कक्षा X", + "Class XI": "कक्षा XI", + "Class XII": "कक्षा XII", + "classes": "कक्षाएं / ग्रेड", + "medium": "शिक्षा का माध्यम", + "address":"पता" + + }, + "prerakStudent" : { + "employeeName": "कर्मचारी का पूरा नाम", + "instituteName": "संस्थान का नाम", + "fullName": "पूरा नाम", + "email": "इमेल", + "gender": "लिंग", + "Male": "पुरूष", + "Female": "महिला", + "Other": "अन्य", + "dob": "जन्म की तारीख", + "plot": "प्लॉट", + "street": "सडक", + "landmark": "ल्यान्डमार्क", + "locality": "स्थान", + "state": "राज्य", + "district": "जिल्ला", + "village": "गाउँ/नगर/शहर", + "pincode": "पिनकोड", + "type": "ID टाइप", + "value": "ID मान", + "AADHAR": "आधार", + "PAN": "पैन", + "LICENSE": "लाइसेंस", + "OTHER": "अन्य", + "mobile": "मोबाइल", + "instituteOSID": "इंस्टीट्यूट OSID", + "qualification": "योग्यता", + "program": "अध्ययन का कार्यक्रम", + "graduationYear": "स्नातक वर्", + "marks": "अंक / रैंकिंग / जीपीए, आदि", + "academicQualifications": "शिक्षा विवरण", + "identityDetails": "पहचान विवरण", + "contactDetails": "संपर्क विवरण", + "employmentType": "रोजगार प्रकार", + "Permanent": "स्थायी", + "Contract": "अनुबंध", + "start": "प्रारंभ तिथि", + "end": "अंतिम तिथि", + "teacherType": "शिक्षक प्रकार", + "Acting head teacher": "कार्यवाहक प्रधानाध्यापक", + "Instructor positioned as per RTE": "आरटीई के अनुसार तैनात इंस्ट्रक्टर", + "Principal": "प्रिंसिपल", + "VicePrincipal": "वाइस प्रिंसिपल", + "Lecturer": "व्याख्याता", + "subjectsTaught": "विषय पढ़ाए गए", + "subjects": "विषय", + "Kannada": "कन्नड़", + "Mathematics": "गणित", + "Science": "विज्ञान", + "Social Science": "सामाजिक विज्ञान", + "Art": "कला", + "grades": "ग्रेड", + "class": "वर्तमान नामांकन कक्षा / कक्षा।", + "fileName": "शिक्षा से संबंधित दस्तावेज़", + "English": "अंग्रेजी", + "Pre-Pri.": "प्री प्राइमरी", + "Class I": "कक्षा I", + "Class II": "कक्षा II", + "Class III": "कक्षा III", + "Class IV": "कक्षा IV", + "Class V": "कक्षा V", + "Class VI": "कक्षा VI", + "Class VII": "कक्षा VII", + "Class VIII": "कक्षा VIII", + "Class IX": "कक्षा IX", + "Class X": "कक्षा X", + "Class XI": "कक्षा XI", + "Class XII": "कक्षा XII", + "Head teacher":"प्रमुख शिक्षक", + "Teacher": "शिक्षक", + + "institute":"संस्थान का नाम", + "board":"शिक्षा बोर्ड", + "documents": "शिक्षा संबंधी दस्तावेज़", + "educationDetails" : "शिक्षा संबंधी दस्तावेज", + "AS_PER_AADHAAR_ID": "आईडी (आधार) के अनुसार", + "Yes" : "हां", + "No" : "नहीं" + + } + +} \ No newline at end of file diff --git a/src/assets/icons/icon-128x128.png b/src/assets/icons/icon-128x128.png new file mode 100644 index 0000000000000000000000000000000000000000..d7a355cb7e2c420936d3fbc394d8853610a09ba7 GIT binary patch literal 8893 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 LNkvXXu0mjf3sO4l literal 0 HcmV?d00001 diff --git a/src/assets/icons/icon-144x144.png b/src/assets/icons/icon-144x144.png new file mode 100644 index 0000000000000000000000000000000000000000..0fcad84e0ca67f44e6267586665af5454221e70b GIT binary patch literal 10861 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 Diqj#p literal 0 HcmV?d00001 diff --git a/src/assets/icons/icon-152x152.png b/src/assets/icons/icon-152x152.png new file mode 100644 index 0000000000000000000000000000000000000000..a41c4b2a770de7cd02c1af57804a39526dd72fa1 GIT binary patch literal 11825 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 literal 0 HcmV?d00001 diff --git a/src/assets/icons/icon-192x192.png b/src/assets/icons/icon-192x192.png new file mode 100644 index 0000000000000000000000000000000000000000..f0c7532b4d0562bf91f78c766630e1e11a5bc98a GIT binary patch literal 17092 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 literal 0 HcmV?d00001 diff --git a/src/assets/icons/icon-48x48.png b/src/assets/icons/icon-48x48.png new file mode 100644 index 0000000000000000000000000000000000000000..2515476ef77fdbb4de778543ba9fb0cbfa423240 GIT binary patch literal 1852 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
x_Gk$o_Fuw}{j|BN^PL2EFTVh)Vd| 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 literal 0 HcmV?d00001 diff --git a/src/assets/icons/icon-96x96.png b/src/assets/icons/icon-96x96.png new file mode 100644 index 0000000000000000000000000000000000000000..f45e3e8ad701da9bf511e11636fc3a48eb3d2a46 GIT binary patch literal 5781 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 Tx%}=P00000NkvXXu0mjf-hKXA literal 0 HcmV?d00001 diff --git a/src/assets/images/home-new.png b/src/assets/images/home-new.png new file mode 100644 index 0000000000000000000000000000000000000000..8b3762debf02130e395bb3ee71f2174ee94bccde GIT binary patch literal 19364 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 zms�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 literal 0 HcmV?d00001 diff --git a/src/assets/images/home.svg b/src/assets/images/home.svg new file mode 100644 index 0000000..3cfcba8 --- /dev/null +++ b/src/assets/images/home.svg @@ -0,0 +1,441 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/images/image.png b/src/assets/images/image.png new file mode 100644 index 0000000000000000000000000000000000000000..fae9e9edd675c71b3b00999b25e0e87d9bb0bfe9 GIT binary patch literal 1545 zcmV+k2KM=hP)5XR{a{FaNKT!PYpTtU)-l?tp5Vj!^3Z&n4dJFo%elt*${2WEAMBdB(aDV?x!*}I(%NG1VpRcVvGWyWvLVH}5>TdpxWkudJNh%b3388p zESg$Dj@OG!D=Z47<9ca?0mM(iQSWqiodwqbqD8ja9Wt5pV@nLIk`c$4-jl=^6>P}N zYOmQ7pRr)F5(&dx?1U^)j@@4@i7>ka)EuR)k!FtUD7Tj|na=Fk=2-Cl^j^PB7^4US zS(N>z>s%7%hu43euYSKgZPmmO>sE?0FlylEVQSRFe}gpn zWhsPFXLs#<#3JCyI<2F58nkdOUw ztjS#jVOTK+ly6BGTSbwhpqi&JgCM?SgsIuG z2*Rk<0*E~Yau^A${pcnFj`dqhZZW5*0RMcyt*d9XqfZ4M84#~kqpqk&5yoSqF%Y@Q z&1$`Qxms_|YW2zM%Q_SFN{dEoqaOCEpsO?a;jFtmMF@bjqGY#0v)Q_hfifbhwuOgU zEJ{vKUp!_NVd9u=4>e)FtN&I5Y6PV1*qy5ia8DQ|o19@znL-$UJSv^a{)k2Iee`P( zMj)O6ZbKDeTC3jXX6+Qh5NvGBN@jmAN&L9@F>nw@psoOK?J&K&mr!@xr3gcCutmM? zF`isS6=nb2Bh&O8EMb&my@{#HVSN7ct#TN9OM)1RP}$d5=J{QMYfpF!{w}S;wY^vt zki)3|xA1D(Q`9#M4~kmBy|Od?iV#K^<|v&IfqqrgYk0OJsrgyo!4d|C6=)g29v~Gw zf0hIMuCl!zf30+S!Z0>Fn!FslR{s*2n`a^Wpb4XrQ-8D=xW466w%X3)>Quqw$cy8= zYzTl&kqC_GAxuV8MFh1YL2{+r+xV!I^6Nb@e7{{Uf-oEh0MJ`4Xc@o+TLDMzqIQnn zfIzfNHntln6tV1?C#$kiG;m4O1z zgV=LTaI9niBL_esBQ?`Ye^ykkgIq`laUdG9Rp4U6s`M+uV2hHc5_(AVpV%?65q;Q* zeY9$!s2yp4gi(obt#85)*?LIg$9Td3FoE;Wd#?dC3mS6S!3b2ZJU=e3-YJB^CKX_{ z6QbwyjyC=+j@Y9h%r2y171zjuObVn?38p89zlIo*(8!rW7{+Hi=TEm*J^X{dezLusP0a`JsI8u@U9F=qrU^InJ+t^%}W_(&!in3z+pXH v_bf@A)2i3N!$s`KJtLEzTSpFaBqaI*2akSycDvYx00000NkvXXu0mjf&okr} literal 0 HcmV?d00001 diff --git a/src/assets/images/logo-1.png b/src/assets/images/logo-1.png new file mode 100644 index 0000000000000000000000000000000000000000..9020b651532468e32525d490ff7f6bf386367b61 GIT binary patch literal 5755 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 Gu>S%UX&(9j literal 0 HcmV?d00001 diff --git a/src/assets/images/logo-ndear.png b/src/assets/images/logo-ndear.png new file mode 100644 index 0000000000000000000000000000000000000000..39fb637b58762384e45bf3512da60293145c1dc1 GIT binary patch literal 10914 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 Eg045gX#fBK literal 0 HcmV?d00001 diff --git a/src/assets/images/logo-sbrc.png b/src/assets/images/logo-sbrc.png new file mode 100644 index 0000000000000000000000000000000000000000..f5d3fd2de95613a26d53a51606459cc0e261259c GIT binary patch literal 10457 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 WeHZB1+Zo%ClXb8bwf;&M&aCdk37w4XH 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ӏ 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

|q*!mGSOV&zOkg%cYPlrgVvZ!-Jn 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 HsN(z+A@TL7 literal 0 HcmV?d00001 diff --git a/src/assets/images/mobile.png b/src/assets/images/mobile.png new file mode 100644 index 0000000000000000000000000000000000000000..c02e8e20c17e32391b03a46288b3b9d2b08b8498 GIT binary patch literal 35255 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

  • ;O2Y`*VyjC=BYVV(S%(SZcLvE`qfDq01tYoEV2tR<-`R?1 z)hH5_>WC=ltfF>jqzWBg#h#Od1rZJl$K!6fQJnQ zk?pZ<;lNbAh_{a|uGzs8C)IR81W=fNE3q;igQ)eG{F%*pz@vlwR9 zGM=A0oAp4YY~m^pc8*$rl?mg0C6=nL?d8=l?T?~(XN@lO=^ta9PLqwL2&%C#1WY8x z>Lq0$$yig~)v#*4t?U#5#p_l+Cch0R9=-iU{zR!F4n^3V3vnZkm%u+wg6AtJ9 z<2-xNO1&}kTXD@_*1+r&A90sIaIW7CDy#AJX}qmb;` z{Pz7~8^u$D;=FZ!Z+NE{F~9kK_NMoSwwwk>b2ls@?@Fh_Tcdc@lE$oDEkk6R{O8XQ zBl_PXvo$XtQFlYs;&z?&t-IG?sI-GAiC}tH0#X|fHJjTURCB`1lncHedFDJKoyJ^n{MQ}^VuGv`zEXZU7Z(RsY0U-4uZq%q)F zP;(%aBzN>)%P~C1>zzHlXcqhI?uEV^hmmc4e0(P-U|-i?8~2*$QulD#y~=&G&1~{^U`NI z@9(sf(X%hf(N<{cM7K@&N3wlGr8~3Be$4%)D35g6N`fS7f4aFvp~=uTC^e7gKHGsk zW|KUzFDaC)&{@;{zvec5h$>Hnhqt=b{Y2``)Nz)Hc;(stsfOg@-{}YK1l*$(V53Mg z`C2yoS4a%|YHbuRbIySE@>FN^&9A}hRO#=C`c6bfPc8VWHg@$hZP z@v5jWz^$QDL73CYu2rJLF8#sV-8zjjHL!u&v7smy)v#th@^MN%7Q$C-^U5` z%#&=^rX+=tx$9egrMwEa9WHgf!Pvvyw5-^6G+Ncd0!=Y}>Q)af!3q6gXbGzq0r{ zavg!?#|w6xwpEo_aQ%}y@Q6J&L(WskyLe=h3vTZ!u{(0P%&p*B>!nLaH7Dbij6XO> z`s=_8mJe`$s`-L{tT`=N!&I-#Nn+Ci82IlIeAn5^Ny- zoO+{g$jO>mr^UJ7S?jz%|KF7^TPDCd`daF#H-Shx%Tf1jH_uZTrS7)xbh)d@OdzUp z4iOX=Cpg_^GyC=l#{hI<(Cn|6x|q8~Q;H~KGGwPbW0m`gzh!uKNIo#Jh>|3bpvKVh zQ5-$pKDjM6Vq?hGXzMQ6=U_f(#1nDBWvNy&T;(Y9OHW}G3`VQ)=#5K1)~xDmBc-lo z092o6IGQf~HI;wkIxw%jm(D`!TIy7pc0%{dk9<0w{O|{>WLEUzO@|w83t2P-oR(#7 zZS6`Tm=HhZDXdn~jg~7!6zJM>e$0b`Do-a@{5+>HJujYw3ayuUjIDh;rqSSg`Z{Bg zmaE7qW}5Cmc*G8its`AAkp!fIwy^(JdjFaaGS7X+^He}sV1c36t@Iwg9(S-ex3y@F zsSERN?R=rWZlq?nb;$_}Wow?Q!6nvLML|_#Q!kPIS}L#xYsp5?`)_;{Ezv~<+SA|h z(j=(u4S4zx_`ib?V7S3Z|2r(R-hio{uvfyhCir3Ie{59X2KNvWBC^8eg8F{{2YyKY A8UO$Q literal 0 HcmV?d00001 diff --git a/src/assets/images/ndear.png b/src/assets/images/ndear.png new file mode 100644 index 0000000000000000000000000000000000000000..39fb637b58762384e45bf3512da60293145c1dc1 GIT binary patch literal 10914 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 Eg045gX#fBK literal 0 HcmV?d00001 diff --git a/src/assets/images/theme.png b/src/assets/images/theme.png new file mode 100644 index 0000000000000000000000000000000000000000..d005997927ff4f4a3a77f141f8a85b94bcac7ea5 GIT binary patch literal 25651 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 D2pdG` literal 0 HcmV?d00001 diff --git a/src/assets/images/theme_icon.svg b/src/assets/images/theme_icon.svg new file mode 100644 index 0000000..52426d3 --- /dev/null +++ b/src/assets/images/theme_icon.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/assets/pages/about.html b/src/assets/pages/about.html new file mode 100644 index 0000000..19338a8 --- /dev/null +++ b/src/assets/pages/about.html @@ -0,0 +1,85 @@ +
    + +
    +
    +
    +
    + +

    + About Us +

    + +
    +
    +

    + eLocker - Empowering The Nation with Secure and Verified Information +

    +

    + The Government’s “eLocker Initiative” complements the Sri Lanka Unique Digital Identity (SLUDI) program, by allowing citizens to manage authenticated documents that can carry specific personal information about themselves, for them to avail any specific + Government/Private sector services or benefits. These documents can be validated and confirmed by entities (or requesting organisations) that have the authority to ascertain such information, and require this authentication mechanism + to provision the requested service or benefits to the citizens. Such authenticated documents are called digital credentials or certificates - which are tamper-proof, digitally signed and offline-verifiable. Examples of such digital + credentials include the National identity documents issued by SLUDI (or NIC), Educational certificates, Driving licences, Taxpayer certificates, Confirmation of Mobile Number Ownership and many more. The eLocker Initiative is aimed + at serving three primary actors, namely; Citizens - who are the holders of the credentials; Issuers - the credential issuing institutions; and the Verifiers - the institutions that use the credentials to serve citizens. The core + objective of the eLocker Initiative is to facilitate seamless consent-based sharing of trusted and verified information between the Citizens, Government and Private sector institutions for the fulfilment of various Citizen-requested + transactions, while ensuring complete privacy and security of the Citizen’s data. + +

    + +
    +
    + + +
    +
    +

    + Components of eLocker System +

      +
    • + eLocker Wallet: +

      + Wallet stores verified personal information about a citizen. The citizen is the absolute owner of his information. The eLocker wallet is the tool he uses to manage his information. Available either as a smartphone application or a web application +

      +
    • +
    • + Digital Registries: +

      + The master data registries with respect to the credentials. The eLocker Registry infrastructure allows issuers to operate “live”, “reusable” and “trustworthy” registries as a “single source of truth” +

      +
    • +
    • + Trust Framework: +

      + Trust framework specifies the governance and technical specifications that inject trust into the credential ecosystem that includes issuers, holders and verifiers. Creates technical and human/organisation level trust +

      +
    • +
    +

    + +

    + The rolling out of the eLocker platform is being done in alignment with the Government of Sri Lanka’s Digital Government Strategy 2020-2024. This goes hand-in-hand with the SLUDI initiative, which provides all Sri Lankans with a biometric-enabled unique + Digital Identity. To aid this vision, the eLocker platform has used the open-source “Sunbird-RC” digital credentialing platform, as the core technology foundation. +
    ICTA has taken steps to launch the eLocker platform, in synchronisation with the Pilot launch of SLUDI in the country. As part of the 1st release of the eLocker, the citizens will have the ability to fetch and maintain their + SLUDI identity and COVID-Vaccination certificates as well as scanned copies of other Government documents, in their eLocker Wallet. Supporting other forms of Government and Private sector digital credentials in the eLocker, will + be rolled out in due course. The eLocker platform will also provide various Government departments an ability to issue tamper-proof, digitally signed documents for various transactions, in the future. +

    + +
    +
    +
    +
    +
    \ No newline at end of file diff --git a/src/assets/pages/terms-and-conditions.html b/src/assets/pages/terms-and-conditions.html new file mode 100644 index 0000000..6903c8d --- /dev/null +++ b/src/assets/pages/terms-and-conditions.html @@ -0,0 +1,649 @@ +
    + +
    +
    +
    +
    +

    + Terms and Conditions +

    + +
    +
    +

    + These are the terms (the “Agreement”) that govern your participation in the eLocker, provided by the Information and Communication Technology Agency (ICTA) under the Ministry of <<XXX>>, Government of Sri Lanka. eLocker (hereinafter referred + to as ‘Site’) and all data, text, designs, pages, graphics, user interfaces, visual interfaces, images, artwork, photographs, trademarks, logos, audio and video and HTML code, source code, or software (collectively, “Content”) + that reside or are viewable or otherwise discoverable on the Site are the property of Information and Communication Technology Agency (ICTA), Ministry of Electronics and Information Technology. + +

    + +

    + In order to access or use eLocker, you must agree to the terms of services set out below. +

    +

    + By visiting or using the Site, you expressly agree to and consent to be bound by these Terms, as updated from time to time. IF YOU DO NOT AGREE WITH ANY PART OF THESE TERMS, DO NOT USE THE SITE. +

    +

    + You may not use the System in any manner and may not accept the Terms if you are not of legal age to form a binding contract. +

    +

    + You represent and warrant that you have authority to bind the entity on whose behalf you are using the System to the Terms, and by accepting the Terms, you are doing so on behalf of that entity (and all references to “you” in the Terms refer to that entity). +

    +

    + In particular, if you are accessing or using the system on behalf of a Provincial or Central department /PSU/ Institution/ Autonomous body/ Corporation etc., you represent and warrant that you have authority to bind that department (Provincial or Central) + /PSU/ Institution/ Autonomous body/ Corporation etc. to these Terms. +

    +

    +

    +
    + +
    +
    +

    DEFINITIONS

    +
      +
    1. +

      + a) “eLocker” means the Government-owned and operated web and mobile-based hosting of the eLocker system. +

      +
    2. +
    3. +

      + b) “eLocker” means a service of preservation, retention of electronic records by the subscriber and delivery of electronic records to the subscriber. + +

      +
    4. +
    5. +

      + c) “eLocker Directory” means a web page managed by the Government or eLocker authority for registration and providing details of registered issuers, requester, repositories and access gateways providers. +

      +
    6. +
    7. +

      + d) “eLocker Portal” means a web and mobile-based system to provide users access to documents under the eLocker System. + +

      +
    8. +
    9. +

      + g) “API” means any mechanism that allows a system or service to access data or functionality provided by another system or service. The API is generally used to interact (like query, list, search, sometimes submit and update) directly with the specific + information on a system, to trigger some action on other systems, or to perform some other action on other systems. +

      +
    10. +
    11. +

      + h) “Codes” means access codes, identification codes, tokens, private security keys, passwords and/or public security certificates that Government may issue to you to access or use with the System. +

      +
    12. +
    13. +

      + i) “System” comprises the services and platform provided by the Information and Communication Technology Agency (ICTA) under the Ministry of + <>, under the eLocker accessible at + <>. +

      +
    14. +
    15. +

      + j) “Developer” means a person or entity other than Company that produces or provides software or services through which a user can access the System. +

      +
    16. +
    17. +

      + k) “Documentation” means any printed documentation regarding the System, any electronic documentation regarding the platform, and any other online or other documentation that is generally made available by NDH to Users or Developers regarding the System. +

      +
    18. +
    19. +

      + l) “issuer” means any Provincial or Central department or agency or body corporate issuing digitally authenticated electronic records to the subscriber under the eLocker system. +

      +
    20. +
    21. +

      + m) “requester” means any Provincial or Central department or agency or body corporate requesting access to the subscriber’s digitally signed or equivalently authenticated electronic records preserved and retained in the repository created and managed + under the eLocker system. +

      +
    22. +
    23. +

      + n) “repository” means an electronic repository of digitally signed and, or digitised electronic records maintained by the eLocker system for the purpose of provisioning them to the users. +

      +
    24. +
    25. +

      + o) “subscriber” means subscriber to an eLocker under the eLocker system. +

      +
    26. +
    27. +

      + p) “Uniform Resource Identifier (URI)” means a unique reference to a document stored in an eLocker repository. +

      +
    28. +
    29. +

      + q) “User” means a person or other entity who accesses the System directly or indirectly. +

      +
    30. +
    +

    +
    +
    + + +
    +
    +

    ACCOUNT REGISTRATION

    + +
      +
    1. +

      + For the purpose of providing preservation and retention of machine-readable, printable, shareable, verifiable and secure Provincial or Central department or agency or body corporate issued electronic records, the Government and other service providers + to provide an eLocker system of limited electronic storage to all users. +

      +

    2. +
    3. +

      + You may browse the Site without registering for an account. However, you will be required to register for an account with your mobile no if you intend to use certain features or services offered by the Site. +

      +
    4. +
    5. +

      + Any individual who is a resident of Sri Lanka shall be able to open and gain access to the eLocker portal after submitting the duly prescribed application form. +

      +
    6. +
    7. +

      + eLocker Portal shall provide access to repositories and access gateway for issuers to issue and requesters to access digitally signed or equivalently authenticated electronic records respectively in a uniform way in real-time. +

      +
    8. +
    9. +

      + Any individual may obtain the services of the licensed or empanelled eLocker service providers for the purpose of accessing locker, gateways and repository services using the web or mobile-based eLocker Portal. +

      +
    10. +
    11. +

      + a) User must provide either mobile number or SLUDI number and any other information requested from you in order to complete the registration process and be entitled to use the Services. +

      +
    12. +
    13. +

      + b) The Organization/entity requesting such access shall ensure the following: +

      +
        +
      1. +

        + (i) The Head of the Organization or a Senior Official from the Organization, whom the Organization authorizes, should register on the Portal on behalf of their Organization. +

        +
      2. +
      3. +

        + (ii) The Registration/Sign-up on the eLocker Portal should be done using the Organization’s official email ID. +

        +
      4. +
      5. +

        + (iii) The Details submitted by the Organization shall be verified; upon verification, the Organization shall be authorized to use the service. +

        +
      6. +
      7. +

        + (iv) If any information provided is found to be false or incorrect, or inadequate, then the registration may be cancelled at any point in time. +

        +
      8. +
      9. +

        + (v) any other information as prescribed by the Government +

        +
      10. +
      +
    14. +
    15. +

      + c) Upon completing the registration process, you will be able to login using mobile no. and an OTP received on your registered mobile number. The registration process may change without any prior information. +

      +
    16. +
    17. +

      + d) You are solely responsible for maintaining the confidentiality of your personal information and login credentials created for the eLocker account and all activities that might result from you failing to keep this information secure. +

      +
    18. +
    19. +

      + e) We have the right to disable any user identification code or password, whether chosen by you or allocated by us, at any time if, in our opinion, you have failed to comply with any of the provisions of this Agreement. You will immediately notify us + of any unauthorized use of your password or user identification code, by sharing details of such unauthorized use at: + <> +

      +
    20. +
    +

    +
    +
    + +
    +
    +

    ACCESS PERMISSIONS

    +
      +
    1. +

      + You will only access (or attempt to access) the Site by the means described by the Government and will comply with the terms and conditions of this Agreement. In addition, you will comply with all Central and Provincial laws, rules, and regulations applicable + to you and your use of the Site and affecting any third-party rights. You agree to use eLocker brand while providing services using these APIs and you will not rebrand these APIs under any other name. You agree to display + any attribution(s) such as eLocker logo or name to your users at the point of service. +

      +
    2. +
    3. +

      A subscriber shall use an eLocker to,

      +
        +
      1. +

        + access and register for eLocker on the web or mobile-based eLocker Portal. +

        +
      2. +
      3. +

        + access documents from issuers using the document URI’s available in the eLocker account. +

        +
      4. +
      5. +

        + grant access to the requester to access Provincial or Central department or agency or body corporate issued records by providing unique document URI; and +

        +
      6. +
      7. +

        + provide consent to the issuer to deposit document URI’s and to the requestor to access documents. +

        +
      8. +
      +
    4. +
    5. +

      + The manner in which the requester uses the eLocker system. +

      +

      + The requester shall use an eLocker to, +

      +
        +
      1. +

        + register on the eLocker directory. +

        +
      2. +
      3. +

        + use authorized gateway providers to access documents stored across repositories; Provincial or Central department or agency or body corporate issued documents based on the URI; and +

        +
      4. +
      5. +

        + take consent from the subscriber to access documents available in the subscriber’s eLocker account. +

        +
      6. +
      +
    6. +
    7. +

      + The manner in which the issuer uses the eLocker system. +

      +
        +
      1. +

        + An eLocker shall allow the subscriber to query the issuer repository by providing the subscriber’s identifier applicable to the issuer organization to enable issuer to provide the URIs of all the linked records the identifiers submitted by the subscriber. +

        +
      2. +
      3. +

        + register on the eLocker Directory. +

        +
      4. +
      5. +

        + issue new digital records in the standard format as prescribed by the appropriate Government. +

        +
      6. +
      7. +

        + provide older digitized records to the subscriber, which are verifiable, shareable, accessible and printable. +

        +
      8. +
      9. +

        + gives consent to any other eLocker service provider to gain access to its documents. +

        +
      10. +
      +
    8. +
    +

    +
    +
    + +
    +
    +

    ACCESS RESTRICTIONS

    +
      +
    1. +

      You will not, either on your own or through any other person or third party:

      +
        +
      1. + Copy, distribute, alter or modify, any part of the Services in any manner whatsoever without eLocker’s explicit authorization in this regard; (ii) access, acquire, copy, monitor or reproduce any portion of the Site or any Content thereof, or circumvent + any restrictions imposed on the access of the Site to obtain or attempt to obtain any materials, documents or information through any means not purposely made available through the Site. eLocker reserves the right to + bar any such activity. +
      2. +
      3. + restrict or inhibit any other person from using the Site, (ii) impersonate any person or entity, whether actual or fictitious, (iii) collect, use, store, access or process any data, including but not limited to sensitive personal information of any User + or any person without express and informed consent of the person +
      4. +
      5. + use the Site or any Content for any purpose that is unlawful or prohibited by these Terms of Use, (ii) violates any law for the time being in force +
      6. +
      7. + intentionally compromise the security of the Site or take any action intentionally, or neglect or omit to take, any action that compromises the security of the Site, +
      8. +
      9. + attempt to gain unauthorized access to any portion or feature of the Site, or any other systems or networks connected to the Site or any of the services offered on or through the Site, by hacking, password “mining,” or any other illegitimate means. +
      10. +
      11. + take any action that imposes an unreasonable or disproportionately excessive burden on the infrastructure of the Site, or any systems or networks connected to the Site, +
      12. +
      13. + upload, modify, publish, transmit, update or share any data, code or information which (i) belongs to another person and to which you do not have any right to; (ii) is misleading in any way; (iii) infringes upon or violates any third party’s rights including + but not limited to, intellectual property rights, rights of privacy or rights of publicity; (iv) contains any sexually explicit content, or content that promotes obscenity, racism, bias, hatred or physical harm of any + kind against any group or individual (v) harasses or advocates harassment of another person; (vi) promotes illegal activities or conduct that is abusive, threatening, obscene, defamatory or libelous; (vii) harm minors + in any way; (viii) tries to gain unauthorized access or exceeds the scope of authorized access to the Site or solicits passwords or personal identifying information for commercial or unlawful purposes from other Users; + (ix) contains software viruses or any other computer code, files or programs designed to interrupt, destroy or limit the functionality of any computer resource; or contains any trojan horses, worms, time bombs, cancel-bots, + easter eggs or other computer programming routines that may damage, detrimentally interfere with, diminish value of, surreptitiously intercept or expropriate any system, data or personal information; (x) threatens the + unity, integrity, defense, security or sovereignty of Sri Lanka, friendly relations with foreign states, or public order or causes incitement to the commission of any cognizable offence or prevents investigation of + any offence or is insulting any other nation. +
      14. +
      15. + You shall not charge any fee for providing access to content, documents/certificates accessed by you through eLocker services or through use of eLocker APIs. You may however charge fees or seek payment for any value-added services that you may independently + develop or provide based on the content accessed through eLocker service or through use of eLocker APIs. +
      16. +
      +
    2. +
    +

    +
    +
    + +
    +
    +

    SUSPENSION AND REVOCATION OF ELOCKER ACCOUNT

    + +
      +
    1. +

      The eLocker may suspend such account

      +
        +
      1. +

        + on receipt of a request to that effect from +

        +
          +
        1. +

          the subscriber listed in the eLocker account; or

          +
        2. +
        3. +

          any person duly authorized to act on behalf of that subscriber

          +
        4. +
        +
      2. +
      3. +

        + if it is the opinion of eLocker authority that the subscriber’s eLocker account should be suspended in the public interest for reasons to be included in writing. +

        +
      4. +
      +
    2. +
    3. +

      + A eLocker account shall not be suspended for a period exceeding thirty days unless the subscriber has been given an opportunity of being heard in the matter. +

      +
    4. +
    5. +

      + On suspension of an eLocker account under these rules, the eLocker service provider shall communicate the same to the subscriber and other users. For the purpose of these rules, suspension of eLocker account of subscriber implies that neither requester + nor issuer shall be able to access subscriber’s account during the period of such suspension. +

      +
    6. +
    7. +

      + Subject to sub-rule (2), the eLocker authority may revoke a subscriber’s eLocker account if not satisfied after making such inquiry. +

      +
    8. +
    +

    +
    +
    + +
    +
    +

    USER SUBMISSIONS

    +

    + You agree to furnish information concerning any errors, problems, difficulties, or suggestions regarding the access to or use of the Site. You will also promptly respond to any reasonable questions provided by eLocker. You acknowledge and agree that all + information provided in accordance with this section shall be considered User Submissions. You agree and undertake not to circumvent any restrictions placed by eLocker on access to the Services. You further permit eLocker to monitor + your use of the Site to ensure compliance with the terms. +

    +

    +
    +
    + +
    +
    +

    AUDIT

    +

    + The eLocker service provider shall get its operations audited annually by an auditor, and such audit shall include, inter alia: +

    +
      +
    1. +

      security policy and planning.

      +
    2. +
    3. +

      physical security.

      +
    4. +
    5. +

      technology evaluation.

      +
    6. +
    7. +

      contracts or agreements; and

      +
    8. +
    9. +

      policy requirements as may be required under these rules.

      +
    10. +
    +

    +
    +
    + +
    +
    +

    CONFIDENTIAL INFORMATION

    +

    + The following information shall be treated as confidential, namely: +

    +
      +
    1. + eLocker account application. +
    2. +
    3. + eLocker account information collected from the subscriber or elsewhere as part of the registration. +
    4. +
    5. + subscriber agreement. +
    6. +
    7. + eLocker contents. +
    8. +
    9. + document URI; and +
    10. +
    11. + any other information as may be notified by the ICTA. +
    12. +
    +

    +
    +
    + +
    +
    +

    ACCESS TO CONFIDENTIAL INFORMATION

    + +
      +
    1. +

      Access to confidential information shall be subject to the provisions of the Act and the Rules made thereunder. +

      +
    2. +
    3. +

      Access to confidential information by the employees of the eLocker shall be on a “need-to-know” and “need-to-use” basis. The process of maintaining the confidentiality of information has to be included in the eLocker log.

      +
    4. +
    5. +

      The backup of all information shall be kept offsite in the disaster recovery facility. d) The confidential information shall not be preserved and retained outside Sri Lanka.

      +
    6. +
    +

    +
    +
    + +
    +
    +

    CONTENT

    +

    + Except as expressly provided in these Terms of Use, no part of the Site and no Content may be copied, republished, reproduced, uploaded, posted, displayed publicly, encoded, translated, transmitted, or distributed in any way to any other computer, server, + website or another medium for publication or distribution or for any commercial enterprise, without eLocker’s express prior written consent. You may use the information made available on the Site, provided that you will +

    +
      +
    1. +

      use such information only for your personal, non-commercial informational purpose and do not copy or post such information on any networked computer or broadcast it in any media,

      +
    2. +
    3. +

      not make any modifications to any such information and any additional representations or warranties relating to such documents and content.

      +
    4. +
    +

    +
    +
    + +
    +
    +

    TERMINATION

    +

    + If you wish to terminate the Terms, you will provide prior written notice to eLocker, and upon termination, you will cease to use the Site. eLocker reserves the right to terminate the Terms with you or discontinue the Services for any reason and at any + time without liability or other obligation to you. Upon any termination of the Terms or discontinuation of your access to the Site, you will immediately stop using the same. eLocker also reserves the right to deny access to the + Services offered on the Site to new Users or to terminate access granted to existing Users at any time without according any reasons. +

    +

    +
    +
    + +
    +
    +

    VIOLATION OF THESE TERMS

    +

    + We may investigate any violation of these Terms, including unauthorized use of the Site. We may provide law enforcement with information you provide to us related to your transactions to assist in any investigation or prosecution of you. In addition, + we may take legal action that we feel is appropriate. If we determine that you have violated these Terms or the law, or for any other reason or for no reason, we may block your account and will prevent you from accessing the Site + at any time without notice to you. +

    +

    +
    +
    + +
    +
    +

    MISCELLANEOUS

    +

    + eLocker reserves the right, at its sole discretion, to change, modify, add or remove portions of these Terms of Use, at any time without written notice by posting the modified Terms on this website indicating the ‘last updated date. Any changes we make + will be effective immediately. Accordingly, you take the responsibility to check these Terms of Use periodically for changes. Your continued use of the platform posts such revision shall constitute acceptance of the modified Terms. + The waiver of a breach of any term hereof shall in no way be construed as a waiver of any other term or breach hereof. +

    +

    +
    +
    + +
    +
    +

    DISCLAIMER

    +

    + The material displayed on our website or App is provided without any guarantees, conditions or warranties as to its accuracy. You agree that your use of the Site and the Services shall be at your sole risk for which eLocker/ shall not be liable. eLocker + shall use all reasonable endeavours to ensure that the Services are uninterrupted, but it does not guarantee or warrant that: +

    +
      +
    1. +

      the Services will meet your specific requirements;

      +
    2. +
    3. +

      the Services will be uninterrupted, timely, secure, or error-free;

      +
    4. +
    5. +

      the results that may be obtained from the use of the Services will be accurate or reliable; and

      +
    6. +
    7. +

      the quality of any products, services, information, or other material purchased or obtained by you through the Services will meet your expectations; and

      +
    8. +
    9. +

      any errors in the Services will be corrected.

      +
    10. +
    +

    +
    +
    + +
    +
    +

    INDEMNITY AND LIMITATION OF LIABILITY

    +

    + You agree to defend, indemnify and hold harmless eLocker and its affiliates, its officers, directors, employees and agents, from and against any and all claims, damages, obligations, losses, liabilities, costs or debt, and expenses (including but not + limited to attorney’s fees) relating to any allegation or third-party legal proceeding to the extent arising from: +

    +
      +
    1. +

      your use of and access to the Site and Service.

      +
    2. +
    3. +

      your violation of any term of this Agreement.

      +
    4. +
    5. +

      your violation of any third party right, including without limitation, any copyright, property, or privacy right; or

      +
    6. +
    7. +

      any claim that your User Content caused damage to a third party.

      +
    8. +
    +

    +
    +
    + +
    +
    +

    JURISDICTION

    +

    Your use of the Site and any dispute arising out of such use of the Site is subject to the laws of Sri Lanka, and the place of jurisdiction shall be Colombo.

    +

    + +

    + The rolling out of the eLocker platform is being done in alignment with the Government of Sri Lanka’s Digital Government Strategy 2020-2024. This goes hand-in-hand with the SLUDI initiative, which provides all Sri Lankans with a biometric-enabled unique + Digital Identity. To aid this vision, the eLocker platform has used the open-source “Sunbird-RC” digital credentialing platform, as the core technology foundation. +
    ICTA has taken steps to launch the eLocker platform, in synchronisation with the Pilot launch of SLUDI in the country. As part of the 1st release of the eLocker, the citizens will have the ability to fetch and maintain their + SLUDI identity and COVID-Vaccination certificates as well as scanned copies of other Government documents, in their eLocker Wallet. Supporting other forms of Government and Private sector digital credentials in the eLocker, will + be rolled out in due course. The eLocker platform will also provide various Government departments an ability to issue tamper-proof, digitally signed documents for various transactions, in the future. + +

    +
    +
    + + +
    +
    +
    \ No newline at end of file diff --git a/src/environments/environment.prod.ts b/src/environments/environment.prod.ts new file mode 100644 index 0000000..3612073 --- /dev/null +++ b/src/environments/environment.prod.ts @@ -0,0 +1,3 @@ +export const environment = { + production: true +}; diff --git a/src/environments/environment.ts b/src/environments/environment.ts new file mode 100644 index 0000000..53c1c80 --- /dev/null +++ b/src/environments/environment.ts @@ -0,0 +1,17 @@ +// This file can be replaced during build by using the `fileReplacements` array. +// `ng build --prod` replaces `environment.ts` with `environment.prod.ts`. +// The list of file replacements can be found in `angular.json`. + +import { GeneralService } from "src/app/services/general/general.service"; + +export const environment = { + production: false, + baseUrl: '', + schemaUrl: 'assets/config/schema.json', //asset path OR URL + logo: 'assets/images/logo.png', //asset path OR URL + keycloakConfig: { + url: 'https://ndear.xiv.in/auth', + realm: 'sunbird-rc', + clientId: 'registry-frontend' + } +}; diff --git a/src/favicon.ico b/src/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..997406ad22c29aae95893fb3d666c30258a09537 GIT binary patch literal 948 zcmV;l155mgP)CBYU7IjCFmI-B}4sMJt3^s9NVg!P0 z6hDQy(L`XWMkB@zOLgN$4KYz;j0zZxq9KKdpZE#5@k0crP^5f9KO};h)ZDQ%ybhht z%t9#h|nu0K(bJ ztIkhEr!*UyrZWQ1k2+YkGqDi8Z<|mIN&$kzpKl{cNP=OQzXHz>vn+c)F)zO|Bou>E z2|-d_=qY#Y+yOu1a}XI?cU}%04)zz%anD(XZC{#~WreV!a$7k2Ug`?&CUEc0EtrkZ zL49MB)h!_K{H(*l_93D5tO0;BUnvYlo+;yss%n^&qjt6fZOa+}+FDO(~2>G z2dx@=JZ?DHP^;b7*Y1as5^uphBsh*s*z&MBd?e@I>-9kU>63PjP&^#5YTOb&x^6Cf z?674rmSHB5Fk!{Gv7rv!?qX#ei_L(XtwVqLX3L}$MI|kJ*w(rhx~tc&L&xP#?cQow zX_|gx$wMr3pRZIIr_;;O|8fAjd;1`nOeu5K(pCu7>^3E&D2OBBq?sYa(%S?GwG&_0-s%_v$L@R!5H_fc)lOb9ZoOO#p`Nn`KU z3LTTBtjwo`7(HA6 z7gmO$yTR!5L>Bsg!X8616{JUngg_@&85%>W=mChTR;x4`P=?PJ~oPuy5 zU-L`C@_!34D21{fD~Y8NVnR3t;aqZI3fIhmgmx}$oc-dKDC6Ap$Gy>a!`A*x2L1v0 WcZ@i?LyX}70000 + + + + Sunbird RC UI + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/main.ts b/src/main.ts new file mode 100644 index 0000000..c7b673c --- /dev/null +++ b/src/main.ts @@ -0,0 +1,12 @@ +import { enableProdMode } from '@angular/core'; +import { platformBrowserDynamic } from '@angular/platform-browser-dynamic'; + +import { AppModule } from './app/app.module'; +import { environment } from './environments/environment'; + +if (environment.production) { + enableProdMode(); +} + +platformBrowserDynamic().bootstrapModule(AppModule) + .catch(err => console.error(err)); diff --git a/src/manifest.webmanifest b/src/manifest.webmanifest new file mode 100644 index 0000000..f24ba48 --- /dev/null +++ b/src/manifest.webmanifest @@ -0,0 +1,59 @@ +{ + "name": "ELocker", + "short_name": "Sunbird-RC", + "theme_color": "#F07D00", + "background_color": "#fafafa", + "display": "standalone", + "scope": "./", + "start_url": "./", + "icons": [ + { + "src": "assets/icons/icon-72x72.png", + "sizes": "72x72", + "type": "image/png", + "purpose": "maskable any" + }, + { + "src": "assets/icons/icon-96x96.png", + "sizes": "96x96", + "type": "image/png", + "purpose": "maskable any" + }, + { + "src": "assets/icons/icon-128x128.png", + "sizes": "128x128", + "type": "image/png", + "purpose": "maskable any" + }, + { + "src": "assets/icons/icon-144x144.png", + "sizes": "144x144", + "type": "image/png", + "purpose": "maskable any" + }, + { + "src": "assets/icons/icon-152x152.png", + "sizes": "152x152", + "type": "image/png", + "purpose": "maskable any" + }, + { + "src": "assets/icons/icon-192x192.png", + "sizes": "192x192", + "type": "image/png", + "purpose": "maskable any" + }, + { + "src": "assets/icons/icon-384x384.png", + "sizes": "384x384", + "type": "image/png", + "purpose": "maskable any" + }, + { + "src": "assets/icons/icon-512x512.png", + "sizes": "512x512", + "type": "image/png", + "purpose": "maskable any" + } + ] +} diff --git a/src/mediaQuery.scss b/src/mediaQuery.scss new file mode 100644 index 0000000..6c6b7e3 --- /dev/null +++ b/src/mediaQuery.scss @@ -0,0 +1,7 @@ + + @media (max-width: 768px) { + .modal-dialog.panel-right{width:100% !important;} + + } + + diff --git a/src/polyfills.ts b/src/polyfills.ts new file mode 100644 index 0000000..5366a93 --- /dev/null +++ b/src/polyfills.ts @@ -0,0 +1,69 @@ +/*************************************************************************************************** + * Load `$localize` onto the global scope - used if i18n tags appear in Angular templates. + */ +import '@angular/localize/init'; +/** + * This file includes polyfills needed by Angular and is loaded before the app. + * You can add your own extra polyfills to this file. + * + * This file is divided into 2 sections: + * 1. Browser polyfills. These are applied before loading ZoneJS and are sorted by browsers. + * 2. Application imports. Files imported after ZoneJS that should be loaded before your main + * file. + * + * The current setup is for so-called "evergreen" browsers; the last versions of browsers that + * automatically update themselves. This includes Safari >= 10, Chrome >= 55 (including Opera), + * Edge >= 13 on the desktop, and iOS 10 and Chrome on mobile. + * + * Learn more in https://angular.io/guide/browser-support + */ + +/*************************************************************************************************** + * BROWSER POLYFILLS + */ + +/** + * IE11 requires the following for NgClass support on SVG elements + */ +// import 'classlist.js'; // Run `npm install --save classlist.js`. + +/** + * Web Animations `@angular/platform-browser/animations` + * Only required if AnimationBuilder is used within the application and using IE/Edge or Safari. + * Standard animation support in Angular DOES NOT require any polyfills (as of Angular 6.0). + */ +// import 'web-animations-js'; // Run `npm install --save web-animations-js`. + +/** + * By default, zone.js will patch all possible macroTask and DomEvents + * user can disable parts of macroTask/DomEvents patch by setting following flags + * because those flags need to be set before `zone.js` being loaded, and webpack + * will put import in the top of bundle, so user need to create a separate file + * in this directory (for example: zone-flags.ts), and put the following flags + * into that file, and then add the following code before importing zone.js. + * import './zone-flags'; + * + * The flags allowed in zone-flags.ts are listed here. + * + * The following flags will work for all browsers. + * + * (window as any).__Zone_disable_requestAnimationFrame = true; // disable patch requestAnimationFrame + * (window as any).__Zone_disable_on_property = true; // disable patch onProperty such as onclick + * (window as any).__zone_symbol__UNPATCHED_EVENTS = ['scroll', 'mousemove']; // disable patch specified eventNames + * + * in IE/Edge developer tools, the addEventListener will also be wrapped by zone.js + * with the following flag, it will bypass `zone.js` patch for IE/Edge + * + * (window as any).__Zone_enable_cross_context_check = true; + * + */ + +/*************************************************************************************************** + * Zone JS is required by default for Angular itself. + */ +import 'zone.js/dist/zone'; // Included with Angular CLI. + + +/*************************************************************************************************** + * APPLICATION IMPORTS + */ diff --git a/src/styles.scss b/src/styles.scss new file mode 100644 index 0000000..3890322 --- /dev/null +++ b/src/styles.scss @@ -0,0 +1,790 @@ +/* You can add global styles to this file, and also import other style files */ + +@import '~@fortawesome/fontawesome-free/scss/fontawesome.scss'; +@import '~@fortawesome/fontawesome-free/scss/solid.scss'; +@import '~@fortawesome/fontawesome-free/scss/regular.scss'; +@import '~@fortawesome/fontawesome-free/scss/brands.scss'; +@import '~mdb-angular-ui-kit/assets/scss/mdb.scss'; +@import "~@angular/material/prebuilt-themes/indigo-pink.css"; +@import "https://fonts.googleapis.com/css2?family=Mulish:ital,wght@0,300;0,400;0,500;0,700;1,200;1,300;1,400;1,600&display=swap"; +@import "https://netdna.bootstrapcdn.com/font-awesome/3.2.1/css/font-awesome.css"; + +/* Importing Bootstrap SCSS file. */ + +@import '~bootstrap/scss/bootstrap'; +@import '~@angular/material/prebuilt-themes/deeppurple-amber.css'; +:root { + // SB-RC + // --primaryColor: #1987B6; + // --secondaryColor: #0098AB; + // --bodyBackground: #F6F8FC; + // --cardBackground: #FFFFFF; + // --tagsBackground: #8D9091; + // --navLabelColor: #1987B6; + // --headerColor: #FFFFFF; + // --headerLinkColor: #0098AB; + // --primaryTextColor: #000000; + // --secondaryTextColor: #8D9091; + // SL + --primaryColor: #1987B6; + --secondaryColor: #0098AB; + --bodyBackground: #F6F8FC; + --cardBackground: #FFFFFF; + --tagsBackground: #F4ECFF; + --navLabelColor: #0098AB; + --headerColor: #FFFFFF; + --headerLinkColor: #0098AB; + --primaryTextColor: #000000; + --secondaryTextColor: #000000; + --linkColor: #443DF6; + --secondaryBtnBgColor: #e8f3f8; + --cardBorder: #00000020; + + + // dark + // --primaryColor: #F07D00; + // --secondaryColor: #F07D00; + // --bodyBackground: #080808; + // --cardBackground: #323232; + // --tagsBackground: #505050; + // --navLabelColor: #FFB96C; + // --headerColor: #313131; + // --primaryTextColor: #FFFFFF; + // --secondaryTextColor:#FFFFFF; + --labelOnPrimary: var(--cardBackground); + --btnBgColor: var(--secondaryColor); + --headerTitle: var(--primaryColor); + --secondarybgColor: var(--secondaryColor); + --secondarytextColor: var(--bodyBackground); + --primarybgColor: var(--primaryColor); + --tagstextColor: var(--secondaryColor); + --navlinkColor: var(--navLabelColor); + --textWhite: var(--secondarytextColor); + /*mm + --secondarybgColor:#4A227C; + --secondarytextColor:#F6F8FC; + --primarybgColor:#F07D00; + --tagstextColor:#1987B6; + --linkColor:#4A227C; + --textBlack:#000000; + --textWhite:#ffffff;*/ +} + + +/* PK changes for - theme support */ + +.nav-link-color { + color: var(--navlinkColor) !important; +} + + +.tagstextColor { + color: var(--primarybgColor) !important; +} + +.headerTitleColor { + color: var(--secondaryColor) !important; +} + +.primarybgColor { + color: var(--primarybgColor) !important; +} + +.card .card-body { + background-color: var(--cardBackground) !important; + color: var(--primaryTextColor) !important; +} + +.card-title { + color: var(--primaryTextColor) !important; +} + + +/* pk changes - end */ + +.bg-header { + background: var(--headerColor) !important; +} + +.text-wb { + color: var(--primaryTextColor) !important; +} + +.table-striped tbody tr:nth-of-type(odd) { + background-color: var(--bodyBackground) !important; +} + +.btn-success { + background-color: #88ecb226 !important; + color: #22B02E !important; + border: 0 !important; +} + +.bg-primary { + background-color: var(--primaryColor) !important +} + +.ngx-pagination .current { + background: var(--primaryColor) !important; + ; +} + +.d-contents { + display: contents !important; +} + +.btn-deny { + background-color: #f3c2c24f !important; + color: #C5292A !important; + border: 0 !important; +} + +textarea.form-control { + height: 100px !important; + font-size: 12px; +} + +.btn-primary { + background-color: var(--primaryColor) !important; + border-color: var(--primaryColor) !important; + border: 0 !important; +} + +.btn-style { + border-radius: 8px !important; + height: 40px; +} + +.text-primary-color { + color: var(--primaryColor) !important; +} + +.text-secondary-color { + color: var(--navLabelColor) !important; +} + +.label-primary { + color: var(--labelOnPrimary) !important; +} + +.p14, +formly-field-select select, +formly-autocomplete-type, +.form-group, +.form-control { + font-size: 14px !important; +} + +.p16, +legend { + font-size: 16px !important; +} + +legend { + font-weight: 700; +} + +.img16 { + width: 16px +} + +.p12 { + font-size: 12px !important; + color: var(--secondaryTextColor); +} + +.btn-bg { + background-color: var( --btnBgColor) !important; +} + +.btn-sec-bg{ + background-color: var( --secondaryBtnBgColor) !important; +} +.badge-secondary { + border: 1px solid #CCCCCC !important; + background-color: var(--bodyBackground) !important; + color: #8D9091 !important; +} + +.marker-pointer { + font-family: "Font Awesome 5 Free"; + content: "\f3c5"; + display: inline-block; + padding-left: 10px; + vertical-align: middle; + font-weight: 900; + font-style: normal; + font-size: 12px; +} + +.input-group-text { + background: none !important; + border: none !important; + font-size: 14px !important; + padding-left: 0 !important; + padding-right: 5px !important; + color: var(--primaryTextColor) !important; +} + +form-group { + color: #000000; +} + +.mb30 { + margin-top: -30px; +} + +// .form-group{ +// font-size: 14px; +// } +.form-group label { + font-size: 12px; + font-weight: 700; +} + +.custom-control-label { + font-size: 14px; + font-weight: 400 !important; + padding-top: 5px !important; +} + +// .text-primary-color{ +// color: #1987B6 !important; +// } +.private-access:before { + font-family: "Font Awesome 5 Free"; + content: "\f023"; + display: inline-block; + padding-left: 10px; + vertical-align: middle; + font-weight: 900; + font-style: normal; + font-size: 12px; +} + +.internal-access:before { + font-family: "Font Awesome 5 Free"; + content: "\f023 "; + display: inline-block; + padding-left: 10px; + vertical-align: middle; + font-weight: 900; + font-size: 12px; + font-style: normal; +} + +.public-access:before { + font-family: "Font Awesome 5 Free"; + content: "\f57c "; + display: inline-block; + padding-left: 10px; + vertical-align: middle; + font-weight: 900; + font-size: 12px; + font-style: normal; +} + +.custom-input-class { + color: #2a8bac; + background-color: var(--secondaryColor); +} + +$primary-color: var(--primaryColor); +$gray-color: #8d9091; +.primary-color { + background-color: var(--primaryColor) !important; +} + +.btn-primary { + background: $primary-color; +} + +$primary-color-dark: #000; +.primary-color-dark { + background-color: $gray-color!important; +} + +// .text-primary-color{ +// color: $primary-color; +// } +.text-grey-color { + color: $gray-color; +} + +.form-label { + color: $primary-color-dark; +} + +html, +body { + height: 100%; +} + +body { + margin: 0; + font-family: "Lato", sans-serif !important; + color: rgb(0, 0, 0); + background: var(--bodyBackground) !important; +} + +.fs-7 { + font-size: 0.8rem; +} + +.fs-8 { + font-size: 0.7rem; +} + +.w-70 { + width: 70% !important; +} + +a { + text-decoration: none !important; + // color: var(--linkColor) !important; +} + +// /* Importing Bootstrap SCSS file. */ +// @import '~bootstrap/scss/bootstrap'; +button.calendar, +button.calendar:active { + width: 2.75rem; + background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACIAAAAcCAYAAAAEN20fAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAOxAAADsQBlSsOGwAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAEUSURBVEiJ7ZQxToVAEIY/YCHGxN6XGOIpnpaEsBSeQC9ArZbm9TZ6ADyBNzAhQGGl8Riv4BLAWAgmkpBYkH1b8FWT2WK/zJ8ZJ4qiI6XUI3ANnGKWBnht2/ZBDRK3hgVGNsCd7/ui+JkEIrKtqurLpEWaphd933+IyI3LEIdpCYCiKD6HcuOa/nwOa0ScJEnk0BJg0UTUWJRl6RxCYEzEmomsIlPU3IPW+grIAbquy+q6fluy/28RIBeRMwDXdXMgXLj/B2uimRXpui4D9sBeRLKl+1N+L+t6RwbWrZliTTTr1oxYtzVWiTQAcRxvTX+eJMnlUDaO1vpZRO5NS0x48sIwfPc87xg4B04MCzQi8hIEwe4bl1DnFMCN2zsAAAAASUVORK5CYII=)!important; + background-repeat: no-repeat; + background-size: 23px; + background-position: 50%; +} + +.btn-outline-secondary { + color: #8d9091; + border-color: #8d9091; +} + +.btn-outline-secondary:hover { + color: #8d9091; + border-color: #8d9091; +} + +.d-flex { + display: flex; +} + +.flex-justify-between { + justify-content: space-between; +} + +.alert-warning { + color: #0e0e0e !important; + background-color: #f7efe0 !important; + border-color: #f7efe0 !important; + font-size: 0.8rem; + padding: 1rem; +} + +.alert-success { + color: #0e0e0e !important; + font-size: 0.8rem; +} + +.red { + color: red; +} + +.display-flex { + display: flex; +} + +.flex-1 { + flex: 1; +} + +.flex-2 { + flex: 2; +} + +.flex-3 { + flex: 3; +} + +.flex-4 { + flex: 4; +} + +.flex-5 { + flex: 5; +} + +.flex-6 { + flex: 6; +} + +[class*="flex-"] { + padding-left: 10px; + padding-right: 10px; +} + +[class*="flex-"]:first-child { + padding-left: 0; +} + +[class*="flex-"]:nth-last-child(2) { + padding-right: 0; +} + +.modal-dialog.panel-right { + position: fixed !important; + left: auto; + top: 0; + right: 0; + bottom: 0; + margin: auto !important; + width: 600px !important; + height: 100%; + max-width: 800px !important; + -webkit-transform: translate3d(0%, 0, 0) !important; + -ms-transform: translate3d(0%, 0, 0) !important; + -o-transform: translate3d(0%, 0, 0) !important; + transform: translate3d(0%, 0, 0) !important; +} + +.modal-dialog.panel-right .modal-content { + height: 100%; + overflow-y: auto; + border-top-right-radius: 0px; + border-bottom-right-radius: 0px; +} + +.modal-content { + background-color: var(--cardBackground) !important; +} + +.modal-dialog.panel-right .modal-body { + padding: 15px 15px 80px; +} + + +/*Right*/ + +.modal.fade .modal-dialog.panel-right { + right: -320px; + -webkit-transition: opacity 0.3s linear, right 400ms ease-in-out !important; + -moz-transition: opacity 0.3s linear, right 400ms ease-in-out !important; + -o-transition: opacity 0.3s linear, right 400ms ease-in-out !important; + transition: opacity 0.3s linear, right 400ms ease-in-out !important; +} + +.modal.fade.show .modal-dialog.panel-right { + right: 0; +} + +.container { + //margin-top: 100px; + padding-bottom: 100px; + margin-top: 75px; +} + +formly-field { + display: block; +} + +@import "~@ng-select/ng-select/themes/default.theme.css"; +[type="file"] { + height: 0; + overflow: hidden; + width: 0; +} + +[type="file"]+label { + background: white; + border: none; + border-radius: 5px; + color: blue; + cursor: pointer; + display: inline-block; + font-family: 'Rubik', sans-serif; + font-size: inherit; + font-weight: 500; + margin-bottom: 1rem; + outline: none; + position: relative; + transition: all 0.3s; + vertical-align: middle; + &:hover { + background-color: darken(white, 5%); + } + #custom-text { + margin-left: 10px; + font-family: sans-serif; + color: #aaa; + } +} + +// discovery page +.selected-list .c-list .c-token { + background-color: #6495ed99 !important; +} + +.dropdown-list.tagToBody { + position: fixed; + width: 400px !important; +} + +.list-area { + background-color : var(--cardBackground) !important; + color: var(--primaryTextColor) !important; +} + +.list-filter { + background: #FFFFFF; +} + + +formly-autocomplete-type .ng-select { + margin-top: 25px !important; + margin-bottom: 5px; +} + +.logo { + // width: 50px; + width: auto; + height: auto; + display: block; + text-indent: -9999px; + max-width: 150px; + min-width: 50px; + min-height: 40px; + max-height: 50px; +} + +.ng-select { + margin-bottom: 15px; + margin-top: 15px; + width: 100%; +} + +.form-control:focus { + border-color: #69afcf; + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px #69afcf; +} + +.navbar-brand { + position: absolute; + width: 100%; + left: 0; + text-align: center; + margin: 0 auto; +} + + +/* MM */ + +.height-100 { + height: 100%; +} + +.hr-0 { + height: 0 !important; + border-color: #ccc !important; +} + +.w-45 { + width: 45px; +} + +.min-70 { + min-width: 70px; +} + +.min-220 { + min-width: 220px; +} + +.fs-12 { + font-size: 12px; +} + +.fs-14 { + font-size: 14px; +} + +.fs-25 { + font-size: 25px; +} + + +/* Button */ + +.btn { + border-radius: 8px !important; + text-transform: capitalize !important; + box-shadow: none !important; +} + +.primary-text-color { + color: $primary-color !important; +} + +.btn-secondary { + color: var(--secondarytextColor) !important; + background-color: var(--secondarybgColor) !important; + border-color: var(--secondarybgColor) !important; +} + +.btn-primary { + color: var(--secondarytextColor) !important; + background-color: var(--primarybgColor) !important; + border-color: var(--primarybgColor) !important; +} + + +/* Tags */ + +.tags-list { + margin-top: 10px; + ul { + margin: 0; + padding: 0; + li { + display: inline-block; + list-style: none; + font-size: 11px; + background-color: var(--secondarybgColor) !important; + padding: 5px 7px; + border-radius: 5px; + margin-right: 5px; + margin-bottom: 5px; + color: var(--tagstextColor) !important; + } + } +} + + +/* Tabs */ + +.nav-tabs { + border: 0 !important; + li { + .nav-link { + padding: 10px 0px; + margin-right: 15px; + text-transform: capitalize; + border: 0px; + color: var(--primaryTextColor) !important; + font-weight: 400 !important; + &.active, + &:hover { + border-bottom: 1px solid var(--navlinkColor) !important; + color: var(--navlinkColor) !important; + background-color: transparent !important; + } + } + } +} + + +/* Card */ + +.card { + background-color: var(--cardBackground) !important; + border: 1px solid var(--cardBorder) !important; +} + +.floating-bottom { + bottom: 30px; + right: 20px; +} + +.btn-icon-circle { + border-radius: 50% !important; + padding: 12px 17px !important; +} + +// @import "~@material/fab"; +// @include fab-core.styles; +// .custom-toggler .navbar-toggler-icon { +// background-image: url("data:image/svg+xml;charset=utf8,%3Csvg viewBox='0 0 32 32' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath stroke='rgba(255,102,203, 0.5)' stroke-width='2' stroke-linecap='round' stroke-miterlimit='10' d='M4 8h24M4 16h24M4 24h24'/%3E%3C/svg%3E") !important; +// } +.toggler { + color: var(--headerLinkColor); +} + +.navbar-light .navbar-nav .nav-link { + color: var(--primaryTextColor) !important; + margin-right: 10px; + margin-left: 10px; +} + +.navbar-light .navbar-nav .active { + color: var(--primaryColor) !important; +} + + +/* borders */ + +.bb-1 { + border-bottom: 1px solid #cecece; +} + +legend{ + color: var(--primaryTextColor) !important; + +} + +h4, h3 { + color: var(--primaryTextColor) +} + +h5 { + color: var(--primaryTextColor) +} + +h6 { + color: var(--primaryTextColor) +} + +p { + color: var(--primaryTextColor) +} + +.text-dark { + color: var(--primaryTextColor) !important; +} + +.text-grey { + color: $gray-color !important; +} + +.form-group { + color: var(--primaryTextColor) !important; +} + +label { + color: var(--secondaryTextColor); +} + +.primary-text { + color: var(--primaryTextColor) !important; +} + +.lh-32 { + line-height: 32px; +} + +.search-area .input-append input { + background-color: var(--cardBackground) !important; +} + +.search-area .fa-search { + color: var(--primaryTextColor) !important; +} + +.modal-header +{ + background-color: var(--headerColor) !important; +} + +.table td, .table th { + color: var(--primaryTextColor)} + + + a, li { cursor: pointer; } diff --git a/src/test.ts b/src/test.ts new file mode 100644 index 0000000..50193eb --- /dev/null +++ b/src/test.ts @@ -0,0 +1,25 @@ +// This file is required by karma.conf.js and loads recursively all the .spec and framework files + +import 'zone.js/dist/zone-testing'; +import { getTestBed } from '@angular/core/testing'; +import { + BrowserDynamicTestingModule, + platformBrowserDynamicTesting +} from '@angular/platform-browser-dynamic/testing'; + +declare const require: { + context(path: string, deep?: boolean, filter?: RegExp): { + keys(): string[]; + (id: string): T; + }; +}; + +// First, initialize the Angular testing environment. +getTestBed().initTestEnvironment( + BrowserDynamicTestingModule, + platformBrowserDynamicTesting() +); +// Then we find all the tests. +const context = require.context('./', true, /\.spec\.ts$/); +// And load the modules. +context.keys().map(context); diff --git a/tsconfig.app.json b/tsconfig.app.json new file mode 100644 index 0000000..82d91dc --- /dev/null +++ b/tsconfig.app.json @@ -0,0 +1,15 @@ +/* To learn more about this file see: https://angular.io/config/tsconfig. */ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "outDir": "./out-tsc/app", + "types": [] + }, + "files": [ + "src/main.ts", + "src/polyfills.ts" + ], + "include": [ + "src/**/*.d.ts" + ] +} diff --git a/tsconfig.json b/tsconfig.json new file mode 100644 index 0000000..4a4dc62 --- /dev/null +++ b/tsconfig.json @@ -0,0 +1,23 @@ +/* To learn more about this file see: https://angular.io/config/tsconfig. */ +{ + "compileOnSave": false, + "compilerOptions": { + "baseUrl": "./", + "outDir": "./dist/out-tsc", + "sourceMap": true, + "declaration": false, + "downlevelIteration": true, + "experimentalDecorators": true, + "moduleResolution": "node", + "importHelpers": true, + "target": "es2015", + "module": "es2020", + "lib": [ + "es2018", + "dom" + ] + }, + "angularCompilerOptions": { + "enableI18nLegacyMessageIdFormat": false + } +} diff --git a/tsconfig.spec.json b/tsconfig.spec.json new file mode 100644 index 0000000..092345b --- /dev/null +++ b/tsconfig.spec.json @@ -0,0 +1,18 @@ +/* To learn more about this file see: https://angular.io/config/tsconfig. */ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "outDir": "./out-tsc/spec", + "types": [ + "jasmine" + ] + }, + "files": [ + "src/test.ts", + "src/polyfills.ts" + ], + "include": [ + "src/**/*.spec.ts", + "src/**/*.d.ts" + ] +} diff --git a/tslint.json b/tslint.json new file mode 100644 index 0000000..277c8eb --- /dev/null +++ b/tslint.json @@ -0,0 +1,152 @@ +{ + "extends": "tslint:recommended", + "rulesDirectory": [ + "codelyzer" + ], + "rules": { + "align": { + "options": [ + "parameters", + "statements" + ] + }, + "array-type": false, + "arrow-return-shorthand": true, + "curly": true, + "deprecation": { + "severity": "warning" + }, + "eofline": true, + "import-blacklist": [ + true, + "rxjs/Rx" + ], + "import-spacing": true, + "indent": { + "options": [ + "spaces" + ] + }, + "max-classes-per-file": false, + "max-line-length": [ + true, + 140 + ], + "member-ordering": [ + true, + { + "order": [ + "static-field", + "instance-field", + "static-method", + "instance-method" + ] + } + ], + "no-console": [ + true, + "debug", + "info", + "time", + "timeEnd", + "trace" + ], + "no-empty": false, + "no-inferrable-types": [ + true, + "ignore-params" + ], + "no-non-null-assertion": true, + "no-redundant-jsdoc": true, + "no-switch-case-fall-through": true, + "no-var-requires": false, + "object-literal-key-quotes": [ + true, + "as-needed" + ], + "quotemark": [ + true, + "single" + ], + "semicolon": { + "options": [ + "always" + ] + }, + "space-before-function-paren": { + "options": { + "anonymous": "never", + "asyncArrow": "always", + "constructor": "never", + "method": "never", + "named": "never" + } + }, + "typedef": [ + true, + "call-signature" + ], + "typedef-whitespace": { + "options": [ + { + "call-signature": "nospace", + "index-signature": "nospace", + "parameter": "nospace", + "property-declaration": "nospace", + "variable-declaration": "nospace" + }, + { + "call-signature": "onespace", + "index-signature": "onespace", + "parameter": "onespace", + "property-declaration": "onespace", + "variable-declaration": "onespace" + } + ] + }, + "variable-name": { + "options": [ + "ban-keywords", + "check-format", + "allow-pascal-case" + ] + }, + "whitespace": { + "options": [ + "check-branch", + "check-decl", + "check-operator", + "check-separator", + "check-type", + "check-typecast" + ] + }, + "component-class-suffix": true, + "contextual-lifecycle": true, + "directive-class-suffix": true, + "no-conflicting-lifecycle": true, + "no-host-metadata-property": true, + "no-input-rename": true, + "no-inputs-metadata-property": true, + "no-output-native": true, + "no-output-on-prefix": true, + "no-output-rename": true, + "no-outputs-metadata-property": true, + "template-banana-in-box": true, + "template-no-negated-async": true, + "use-lifecycle-interface": true, + "use-pipe-transform-interface": true, + "directive-selector": [ + true, + "attribute", + "app", + "camelCase" + ], + "component-selector": [ + true, + "element", + "app", + "kebab-case" + ] + } +} diff --git a/yarn.lock b/yarn.lock new file mode 100644 index 0000000..c1eda96 --- /dev/null +++ b/yarn.lock @@ -0,0 +1,10446 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +"@ajsf/bootstrap4@^0.4.0-beta.1": + version "0.4.0-beta.1" + resolved "https://registry.npmjs.org/@ajsf/bootstrap4/-/bootstrap4-0.4.0-beta.1.tgz" + integrity sha512-HQApiICRbfZYjJDuB2xaiEiyXhIu2vmodA9IW/i2ov6OlBY8mzzC59IOfBsT2lRU/0mLEsoqoV8ezgYz/4XNJA== + dependencies: + "@ajsf/core" "~0.4.0-beta.1" + lodash-es "^4.17.15" + tslib "^2.0.0" + +"@ajsf/core@~0.4.0-beta.1": + version "0.4.0-beta.2" + resolved "https://registry.npmjs.org/@ajsf/core/-/core-0.4.0-beta.2.tgz" + integrity sha512-GURjXQ5vVKfCchiauIE7rAZxE0m8kZ+QasYQD1ofrMBUoIiwGatPc+W3qp+vvkqIgqxQHdUixvcV5tU+IB8WDw== + dependencies: + ajv "^6.10.0" + lodash-es "^4.17.15" + tslib "^2.0.0" + +"@altack/quar@0.0.7": + version "0.0.7" + resolved "https://registry.yarnpkg.com/@altack/quar/-/quar-0.0.7.tgz#faf45ecf4e6fe3bcdf38fe21289821a7751a8fb3" + integrity sha512-vPyLhR9aHQNza1NIEA4QV5BHRkqOAALiXlIaqSuCAbl5rMAwmR0FmX8nT6W+tjeBDe0k2M+d0k4wHdCa2Us4Rw== + dependencies: + jsqr "^1.4.0" + tslib "^2.0.0" + +"@angular-devkit/architect@0.1000.8": + version "0.1000.8" + resolved "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1000.8.tgz" + integrity sha512-2AqPbiEugtPxNz4MGhLh+imUVelhW9h1cdJs2AbxZosIxftPb5DNDQUSAwVmRGp4CtcXVrlvcDwc0f4Fw1aiIA== + dependencies: + "@angular-devkit/core" "10.0.8" + rxjs "6.5.5" + +"@angular-devkit/architect@0.1002.3": + version "0.1002.3" + resolved "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1002.3.tgz" + integrity sha512-7ainXRNO1njZ6bBbJXGpMzCh0OYrzuIRe/+zRj0ncV1YfEsJb2yWBuiza0+y2Ljco7hdd4wr+7eJm7cfn+NvAw== + dependencies: + "@angular-devkit/core" "10.2.3" + rxjs "6.6.2" + +"@angular-devkit/build-angular@~0.1000.0": + version "0.1000.8" + resolved "https://registry.npmjs.org/@angular-devkit/build-angular/-/build-angular-0.1000.8.tgz" + integrity sha512-wwDN2oadQvYPL7lDmvGsoWQjW++0ZnxWk1QVlABGhBSIs8Uxs26Hjd5YNUSsvJavBkqb1UZIOilqzb4dig5MIA== + dependencies: + "@angular-devkit/architect" "0.1000.8" + "@angular-devkit/build-optimizer" "0.1000.8" + "@angular-devkit/build-webpack" "0.1000.8" + "@angular-devkit/core" "10.0.8" + "@babel/core" "7.9.6" + "@babel/generator" "7.9.6" + "@babel/plugin-transform-runtime" "7.9.6" + "@babel/preset-env" "7.9.6" + "@babel/runtime" "7.9.6" + "@babel/template" "7.8.6" + "@jsdevtools/coverage-istanbul-loader" "3.0.3" + "@ngtools/webpack" "10.0.8" + ajv "6.12.3" + autoprefixer "9.8.0" + babel-loader "8.1.0" + browserslist "^4.9.1" + cacache "15.0.3" + caniuse-lite "^1.0.30001032" + circular-dependency-plugin "5.2.0" + copy-webpack-plugin "6.0.3" + core-js "3.6.4" + css-loader "3.5.3" + cssnano "4.1.10" + file-loader "6.0.0" + find-cache-dir "3.3.1" + glob "7.1.6" + jest-worker "26.0.0" + karma-source-map-support "1.4.0" + less-loader "6.1.0" + license-webpack-plugin "2.2.0" + loader-utils "2.0.0" + mini-css-extract-plugin "0.9.0" + minimatch "3.0.4" + open "7.0.4" + parse5 "4.0.0" + pnp-webpack-plugin "1.6.4" + postcss "7.0.31" + postcss-import "12.0.1" + postcss-loader "3.0.0" + raw-loader "4.0.1" + regenerator-runtime "0.13.5" + resolve-url-loader "3.1.1" + rimraf "3.0.2" + rollup "2.10.9" + rxjs "6.5.5" + sass "1.26.5" + sass-loader "8.0.2" + semver "7.3.2" + source-map "0.7.3" + source-map-loader "1.0.0" + source-map-support "0.5.19" + speed-measure-webpack-plugin "1.3.3" + style-loader "1.2.1" + stylus "0.54.7" + stylus-loader "3.0.2" + terser "4.7.0" + terser-webpack-plugin "3.0.1" + tree-kill "1.2.2" + webpack "4.43.0" + webpack-dev-middleware "3.7.2" + webpack-dev-server "3.11.0" + webpack-merge "4.2.2" + webpack-sources "1.4.3" + webpack-subresource-integrity "1.4.1" + worker-plugin "4.0.3" + +"@angular-devkit/build-optimizer@0.1000.8": + version "0.1000.8" + resolved "https://registry.npmjs.org/@angular-devkit/build-optimizer/-/build-optimizer-0.1000.8.tgz" + integrity sha512-esODHuTGEEMx1SmLUq03VAMly8gZUd1vRuvZeKS5HqKwDg8ZzcI7/25BuuUSlyST+6BEdjo2gnmagQnG0VBdQw== + dependencies: + loader-utils "2.0.0" + source-map "0.7.3" + tslib "2.0.0" + webpack-sources "1.4.3" + +"@angular-devkit/build-webpack@0.1000.8": + version "0.1000.8" + resolved "https://registry.npmjs.org/@angular-devkit/build-webpack/-/build-webpack-0.1000.8.tgz" + integrity sha512-y/U+dV5N8W7KECncGSKQWoUH/DFNZCseczyl6LAd8bc0fMr8Z0TAIe8OXj+5CSRRdejWfRIxGtNWM+L2kTCU8A== + dependencies: + "@angular-devkit/architect" "0.1000.8" + "@angular-devkit/core" "10.0.8" + rxjs "6.5.5" + +"@angular-devkit/core@10.0.8": + version "10.0.8" + resolved "https://registry.npmjs.org/@angular-devkit/core/-/core-10.0.8.tgz" + integrity sha512-d9S8VQuqaYg0c/Y2kl/MtICtZ+UKlH5bLm8y2fb2WfSL4A5XIqMGdEVxzFSiR0b1Bnt4NAoQMcBec1blHAqMSQ== + dependencies: + ajv "6.12.3" + fast-json-stable-stringify "2.1.0" + magic-string "0.25.7" + rxjs "6.5.5" + source-map "0.7.3" + +"@angular-devkit/core@10.2.3": + version "10.2.3" + resolved "https://registry.npmjs.org/@angular-devkit/core/-/core-10.2.3.tgz" + integrity sha512-pMM1v9Xjqx6YLOQxQYs0D+03H6XPDZLS8cyEtoQX2iYdh8qlKHZVbJa2WsfzwMoIPtgcXfQAXn113VEgrQPLFA== + dependencies: + ajv "6.12.4" + fast-json-stable-stringify "2.1.0" + magic-string "0.25.7" + rxjs "6.6.2" + source-map "0.7.3" + +"@angular-devkit/core@13.0.4", "@angular-devkit/core@>=7.0.0": + version "13.0.4" + resolved "https://registry.npmjs.org/@angular-devkit/core/-/core-13.0.4.tgz" + integrity sha512-AzgLvERLC6qzY5aZWUpkz5nx+pZChrq3DSt6azMPALwzzoABrwiO6XqzRnj17mXtANXLH2oe9FuHr9jzgFbF1g== + dependencies: + ajv "8.6.3" + ajv-formats "2.1.1" + fast-json-stable-stringify "2.1.0" + magic-string "0.25.7" + rxjs "6.6.7" + source-map "0.7.3" + +"@angular-devkit/schematics@10.2.3": + version "10.2.3" + resolved "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-10.2.3.tgz" + integrity sha512-uCNeq5qH4QEiftgOud+EhTVvdriYQVBrYmX4f4BjVHkjnFhm73h30nfAgs6YuStIp8oxSI8jUGE9DAy331xvmA== + dependencies: + "@angular-devkit/core" "10.2.3" + ora "5.0.0" + rxjs "6.6.2" + +"@angular-devkit/schematics@13.0.4", "@angular-devkit/schematics@>=7.0.0": + version "13.0.4" + resolved "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-13.0.4.tgz" + integrity sha512-3LsmpfAEOxwPyachrktCHtGUYBzQCCzD0++CUjhK8W99v8/IAplkm4dgovFb1RiRkUm44l+HIS7387AbvEIf5A== + dependencies: + "@angular-devkit/core" "13.0.4" + jsonc-parser "3.0.0" + magic-string "0.25.7" + ora "5.4.1" + rxjs "6.6.7" + +"@angular/animations@^10.0.1": + version "10.2.5" + resolved "https://registry.npmjs.org/@angular/animations/-/animations-10.2.5.tgz" + integrity sha512-lIMwjY1pAqpCM4Ayndf2RsvOWRUc5QV7W82XNou6pIBv2T1i1XV6H72I5Sk9Z4sxxBYCWncEaEub+C6NcS8QRg== + dependencies: + tslib "^2.0.0" + +"@angular/cdk@^10.0.1": + version "10.2.7" + resolved "https://registry.npmjs.org/@angular/cdk/-/cdk-10.2.7.tgz" + integrity sha512-ZQjDfTRTn7JuAKsf3jiIdU2XBaxxGBi/ZWYv5Pb3HCl6B4PISsIE5VWRhkoUogoAB0MiFHpjnWeIqknJEm11YQ== + dependencies: + tslib "^2.0.0" + optionalDependencies: + parse5 "^5.0.0" + +"@angular/cli@^10.0.0": + version "10.2.3" + resolved "https://registry.npmjs.org/@angular/cli/-/cli-10.2.3.tgz" + integrity sha512-LLt0AUgLpmaoWA1R7tnUxbJDNs37+WogjNCbNLfvf4YHI04PwKx3OXgx0d8IYNtjHEaGmGp9AQRynvQ2qfXkaA== + dependencies: + "@angular-devkit/architect" "0.1002.3" + "@angular-devkit/core" "10.2.3" + "@angular-devkit/schematics" "10.2.3" + "@schematics/angular" "10.2.3" + "@schematics/update" "0.1002.3" + "@yarnpkg/lockfile" "1.1.0" + ansi-colors "4.1.1" + debug "4.1.1" + ini "1.3.6" + inquirer "7.3.3" + npm-package-arg "8.0.1" + npm-pick-manifest "6.1.0" + open "7.2.0" + pacote "9.5.12" + read-package-tree "5.3.1" + rimraf "3.0.2" + semver "7.3.2" + symbol-observable "1.2.0" + universal-analytics "0.4.23" + uuid "8.3.0" + +"@angular/common@^10.0.1": + version "10.2.5" + resolved "https://registry.npmjs.org/@angular/common/-/common-10.2.5.tgz" + integrity sha512-553yf6ZUHNqT4XpOqbW7EKKMfX56u/8DkwYXuSv8MAKdl4/AW6gliFOEJGYo04JcKF7Knq3VPvGSCO9kupf0hg== + dependencies: + tslib "^2.0.0" + +"@angular/compiler-cli@^10.0.1": + version "10.2.5" + resolved "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-10.2.5.tgz" + integrity sha512-xddSpKudoPidEebIW3x1CvQdx69WEmnFg4DneeQi/tit7mtAKYTJemzYZmP6abdSYhtxovL0bPX5LxYlrtuxIw== + dependencies: + canonical-path "1.0.0" + chokidar "^3.0.0" + convert-source-map "^1.5.1" + dependency-graph "^0.7.2" + fs-extra "4.0.2" + magic-string "^0.25.0" + minimist "^1.2.0" + reflect-metadata "^0.1.2" + semver "^6.3.0" + source-map "^0.6.1" + sourcemap-codec "^1.4.8" + tslib "^2.0.0" + yargs "^16.1.1" + +"@angular/compiler@^10.0.1": + version "10.2.5" + resolved "https://registry.npmjs.org/@angular/compiler/-/compiler-10.2.5.tgz" + integrity sha512-ddJiTPCoVBIGjFDYoYWDpmq3Zs8UKoWpzaeW4u+p17gWW54HwyT5XTxrgtbeUmaxIuRdL4/KT1lGHs9/9bwbCA== + dependencies: + tslib "^2.0.0" + +"@angular/core@^10.0.1": + version "10.2.5" + resolved "https://registry.npmjs.org/@angular/core/-/core-10.2.5.tgz" + integrity sha512-krhOKNTj5XE92Rk9ASX5KmgTF72j7qT2PLVxrGEVjuUKjBY2XaK3TV0Kotq9zI3qa9WgeCrP/Njn6jlKQCCAEQ== + dependencies: + tslib "^2.0.0" + +"@angular/flex-layout@^10.0.0-beta.32": + version "10.0.0-beta.32" + resolved "https://registry.npmjs.org/@angular/flex-layout/-/flex-layout-10.0.0-beta.32.tgz" + integrity sha512-JvuY4dUoy5jyCTIrFiq7n30Znakh1pD3nbg0h0hs2r3t1OiDQb0ZSI1wcumosG/vYHsuJQTuNhbfaIZzA1x8nA== + dependencies: + tslib "^2.0.0" + +"@angular/forms@^10.2.5": + version "10.2.5" + resolved "https://registry.npmjs.org/@angular/forms/-/forms-10.2.5.tgz" + integrity sha512-EnycBx8q+DGmPaX4oSjPejJxx9u0TLb5+tpGxYitdOq/eBpQAAYyWKQGKXb1JB46rPVwJr34MmTltHgAN0zUSQ== + dependencies: + tslib "^2.0.0" + +"@angular/language-service@^10.0.1": + version "10.2.5" + resolved "https://registry.npmjs.org/@angular/language-service/-/language-service-10.2.5.tgz" + integrity sha512-e9ug9TJG31SeSWl65TglXKWOIATGu/P0jVSGKxGF22vQYlAahdRoFXP56+B9P9k+6cDuYljkjH1rdyCaU3iOPg== + +"@angular/localize@^10.0.1": + version "10.2.5" + resolved "https://registry.npmjs.org/@angular/localize/-/localize-10.2.5.tgz" + integrity sha512-YgtVQDJLYAuSBMB4a8UBMbO+5g4IEkHszc6vU8P/G/hqWF6hj04uPqNoYqajVeoTTwPrM2If30/pNh15HjRG2A== + dependencies: + "@babel/core" "7.8.3" + glob "7.1.2" + yargs "^16.1.1" + +"@angular/material@^10.0.1": + version "10.2.7" + resolved "https://registry.npmjs.org/@angular/material/-/material-10.2.7.tgz" + integrity sha512-uk6JkRrKHaM9VFMzX7pWC83YNLVgXPB3D8U1yjSOafCdWwrRZgUHGr8MPlSILCr3o2nxgg5SsKdWcWwHuXXUZA== + dependencies: + tslib "^2.0.0" + +"@angular/platform-browser-dynamic@^10.0.1": + version "10.2.5" + resolved "https://registry.npmjs.org/@angular/platform-browser-dynamic/-/platform-browser-dynamic-10.2.5.tgz" + integrity sha512-7z443I80K2CeqzczlSJ8BlABj0uRgnHUrABE8yLlU2BgifJrriBawzSXEV7UMEN7k7ezbc6NhpOn6Q6BrCKEOA== + dependencies: + tslib "^2.0.0" + +"@angular/platform-browser@^10.0.1": + version "10.2.5" + resolved "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-10.2.5.tgz" + integrity sha512-3JDFRGNxr0IUkjSdGK2Q1BvqnSDpy9YWo0DJP+TEpgW578R84m4X7/wI3jJmFSC2yyouMWrHsot2vcBPAQj89g== + dependencies: + tslib "^2.0.0" + +"@angular/router@^10.0.1": + version "10.2.5" + resolved "https://registry.npmjs.org/@angular/router/-/router-10.2.5.tgz" + integrity sha512-AtSMB/d4V+pw/FL4G/mWWoiJJtZ/075TqsGW7uEFKgxS6Gh2kalv6BTMlXVG5GO+2oU0lsuDvguq5E7Atbak3Q== + dependencies: + tslib "^2.0.0" + +"@angular/service-worker@^10.0.1": + version "10.2.5" + resolved "https://registry.npmjs.org/@angular/service-worker/-/service-worker-10.2.5.tgz" + integrity sha512-8gsI+sg84Oor83w2iyQ99Tmf3sEXXiLT9R/kJ0NuOzRkPW0GV//Hi0y1emTpnp+INzYlCgqRBdp45HlDnynYOA== + dependencies: + tslib "^2.0.0" + +"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.16.0", "@babel/code-frame@^7.8.3": + version "7.16.0" + resolved "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.16.0.tgz" + integrity sha512-IF4EOMEV+bfYwOmNxGzSnjR2EmQod7f1UXOpZM3l4i4o4QNwzjtJAu/HxdjHq0aYBvdqMuQEY1eg0nqW9ZPORA== + dependencies: + "@babel/highlight" "^7.16.0" + +"@babel/code-frame@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.16.7.tgz#44416b6bd7624b998f5b1af5d470856c40138789" + integrity sha512-iAXqUn8IIeBTNd72xsFlgaXHkMBMt6y4HJp1tIaK465CWLT/fG1aqB7ykr95gHHmlBdGbFeWWfyB4NJJ0nmeIg== + dependencies: + "@babel/highlight" "^7.16.7" + +"@babel/compat-data@^7.16.0", "@babel/compat-data@^7.16.4", "@babel/compat-data@^7.9.6": + version "7.16.4" + resolved "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.16.4.tgz" + integrity sha512-1o/jo7D+kC9ZjHX5v+EHrdjl3PhxMrLSOTGsOdHJ+KL8HCaEK6ehrVL2RS6oHDZp+L7xLirLrPmQtEng769J/Q== + +"@babel/core@7.8.3": + version "7.8.3" + resolved "https://registry.npmjs.org/@babel/core/-/core-7.8.3.tgz" + integrity sha512-4XFkf8AwyrEG7Ziu3L2L0Cv+WyY47Tcsp70JFmpftbAA1K7YL/sgE9jh9HyNj08Y/U50ItUchpN0w6HxAoX1rA== + dependencies: + "@babel/code-frame" "^7.8.3" + "@babel/generator" "^7.8.3" + "@babel/helpers" "^7.8.3" + "@babel/parser" "^7.8.3" + "@babel/template" "^7.8.3" + "@babel/traverse" "^7.8.3" + "@babel/types" "^7.8.3" + convert-source-map "^1.7.0" + debug "^4.1.0" + gensync "^1.0.0-beta.1" + json5 "^2.1.0" + lodash "^4.17.13" + resolve "^1.3.2" + semver "^5.4.1" + source-map "^0.5.0" + +"@babel/core@7.9.6": + version "7.9.6" + resolved "https://registry.npmjs.org/@babel/core/-/core-7.9.6.tgz" + integrity sha512-nD3deLvbsApbHAHttzIssYqgb883yU/d9roe4RZymBCDaZryMJDbptVpEpeQuRh4BJ+SYI8le9YGxKvFEvl1Wg== + dependencies: + "@babel/code-frame" "^7.8.3" + "@babel/generator" "^7.9.6" + "@babel/helper-module-transforms" "^7.9.0" + "@babel/helpers" "^7.9.6" + "@babel/parser" "^7.9.6" + "@babel/template" "^7.8.6" + "@babel/traverse" "^7.9.6" + "@babel/types" "^7.9.6" + convert-source-map "^1.7.0" + debug "^4.1.0" + gensync "^1.0.0-beta.1" + json5 "^2.1.2" + lodash "^4.17.13" + resolve "^1.3.2" + semver "^5.4.1" + source-map "^0.5.0" + +"@babel/core@^7.7.5": + version "7.16.12" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.16.12.tgz#5edc53c1b71e54881315923ae2aedea2522bb784" + integrity sha512-dK5PtG1uiN2ikk++5OzSYsitZKny4wOCD0nrO4TqnW4BVBTQ2NGS3NgilvT/TEyxTST7LNyWV/T4tXDoD3fOgg== + dependencies: + "@babel/code-frame" "^7.16.7" + "@babel/generator" "^7.16.8" + "@babel/helper-compilation-targets" "^7.16.7" + "@babel/helper-module-transforms" "^7.16.7" + "@babel/helpers" "^7.16.7" + "@babel/parser" "^7.16.12" + "@babel/template" "^7.16.7" + "@babel/traverse" "^7.16.10" + "@babel/types" "^7.16.8" + convert-source-map "^1.7.0" + debug "^4.1.0" + gensync "^1.0.0-beta.2" + json5 "^2.1.2" + semver "^6.3.0" + source-map "^0.5.0" + +"@babel/generator@7.9.6": + version "7.9.6" + resolved "https://registry.npmjs.org/@babel/generator/-/generator-7.9.6.tgz" + integrity sha512-+htwWKJbH2bL72HRluF8zumBxzuX0ZZUFl3JLNyoUjM/Ho8wnVpPXM6aUz8cfKDqQ/h7zHqKt4xzJteUosckqQ== + dependencies: + "@babel/types" "^7.9.6" + jsesc "^2.5.1" + lodash "^4.17.13" + source-map "^0.5.0" + +"@babel/generator@^7.16.0", "@babel/generator@^7.8.3", "@babel/generator@^7.9.6": + version "7.16.0" + resolved "https://registry.npmjs.org/@babel/generator/-/generator-7.16.0.tgz" + integrity sha512-RR8hUCfRQn9j9RPKEVXo9LiwoxLPYn6hNZlvUOR8tSnaxlD0p0+la00ZP9/SnRt6HchKr+X0fO2r8vrETiJGew== + dependencies: + "@babel/types" "^7.16.0" + jsesc "^2.5.1" + source-map "^0.5.0" + +"@babel/generator@^7.16.8": + version "7.16.8" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.16.8.tgz#359d44d966b8cd059d543250ce79596f792f2ebe" + integrity sha512-1ojZwE9+lOXzcWdWmO6TbUzDfqLD39CmEhN8+2cX9XkDo5yW1OpgfejfliysR2AWLpMamTiOiAp/mtroaymhpw== + dependencies: + "@babel/types" "^7.16.8" + jsesc "^2.5.1" + source-map "^0.5.0" + +"@babel/helper-annotate-as-pure@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.16.7.tgz#bb2339a7534a9c128e3102024c60760a3a7f3862" + integrity sha512-s6t2w/IPQVTAET1HitoowRGXooX8mCgtuP5195wD/QJPV6wYjpujCGF7JuMODVX2ZAJOf1GT6DT9MHEZvLOFSw== + dependencies: + "@babel/types" "^7.16.7" + +"@babel/helper-builder-binary-assignment-operator-visitor@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.16.7.tgz#38d138561ea207f0f69eb1626a418e4f7e6a580b" + integrity sha512-C6FdbRaxYjwVu/geKW4ZeQ0Q31AftgRcdSnZ5/jsH6BzCJbtvXvhpfkbkThYSuutZA7nCXpPR6AD9zd1dprMkA== + dependencies: + "@babel/helper-explode-assignable-expression" "^7.16.7" + "@babel/types" "^7.16.7" + +"@babel/helper-compilation-targets@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.16.7.tgz#06e66c5f299601e6c7da350049315e83209d551b" + integrity sha512-mGojBwIWcwGD6rfqgRXVlVYmPAv7eOpIemUG3dGnDdCY4Pae70ROij3XmfrH6Fa1h1aiDylpglbZyktfzyo/hA== + dependencies: + "@babel/compat-data" "^7.16.4" + "@babel/helper-validator-option" "^7.16.7" + browserslist "^4.17.5" + semver "^6.3.0" + +"@babel/helper-compilation-targets@^7.9.6": + version "7.16.3" + resolved "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.16.3.tgz" + integrity sha512-vKsoSQAyBmxS35JUOOt+07cLc6Nk/2ljLIHwmq2/NM6hdioUaqEXq/S+nXvbvXbZkNDlWOymPanJGOc4CBjSJA== + dependencies: + "@babel/compat-data" "^7.16.0" + "@babel/helper-validator-option" "^7.14.5" + browserslist "^4.17.5" + semver "^6.3.0" + +"@babel/helper-create-regexp-features-plugin@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.16.7.tgz#0cb82b9bac358eb73bfbd73985a776bfa6b14d48" + integrity sha512-fk5A6ymfp+O5+p2yCkXAu5Kyj6v0xh0RBeNcAkYUMDvvAAoxvSKXn+Jb37t/yWFiQVDFK1ELpUTD8/aLhCPu+g== + dependencies: + "@babel/helper-annotate-as-pure" "^7.16.7" + regexpu-core "^4.7.1" + +"@babel/helper-environment-visitor@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.16.7.tgz#ff484094a839bde9d89cd63cba017d7aae80ecd7" + integrity sha512-SLLb0AAn6PkUeAfKJCCOl9e1R53pQlGAfc4y4XuMRZfqeMYLE0dM1LMhqbGAlGQY0lfw5/ohoYWAe9V1yibRag== + dependencies: + "@babel/types" "^7.16.7" + +"@babel/helper-explode-assignable-expression@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.16.7.tgz#12a6d8522fdd834f194e868af6354e8650242b7a" + integrity sha512-KyUenhWMC8VrxzkGP0Jizjo4/Zx+1nNZhgocs+gLzyZyB8SHidhoq9KK/8Ato4anhwsivfkBLftky7gvzbZMtQ== + dependencies: + "@babel/types" "^7.16.7" + +"@babel/helper-function-name@^7.16.0": + version "7.16.0" + resolved "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.16.0.tgz" + integrity sha512-BZh4mEk1xi2h4HFjWUXRQX5AEx4rvaZxHgax9gcjdLWdkjsY7MKt5p0otjsg5noXw+pB+clMCjw+aEVYADMjog== + dependencies: + "@babel/helper-get-function-arity" "^7.16.0" + "@babel/template" "^7.16.0" + "@babel/types" "^7.16.0" + +"@babel/helper-function-name@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.16.7.tgz#f1ec51551fb1c8956bc8dd95f38523b6cf375f8f" + integrity sha512-QfDfEnIUyyBSR3HtrtGECuZ6DAyCkYFp7GHl75vFtTnn6pjKeK0T1DB5lLkFvBea8MdaiUABx3osbgLyInoejA== + dependencies: + "@babel/helper-get-function-arity" "^7.16.7" + "@babel/template" "^7.16.7" + "@babel/types" "^7.16.7" + +"@babel/helper-get-function-arity@^7.16.0": + version "7.16.0" + resolved "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.16.0.tgz" + integrity sha512-ASCquNcywC1NkYh/z7Cgp3w31YW8aojjYIlNg4VeJiHkqyP4AzIvr4qx7pYDb4/s8YcsZWqqOSxgkvjUz1kpDQ== + dependencies: + "@babel/types" "^7.16.0" + +"@babel/helper-get-function-arity@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.16.7.tgz#ea08ac753117a669f1508ba06ebcc49156387419" + integrity sha512-flc+RLSOBXzNzVhcLu6ujeHUrD6tANAOU5ojrRx/as+tbzf8+stUCj7+IfRRoAbEZqj/ahXEMsjhOhgeZsrnTw== + dependencies: + "@babel/types" "^7.16.7" + +"@babel/helper-hoist-variables@^7.16.0": + version "7.16.0" + resolved "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.16.0.tgz" + integrity sha512-1AZlpazjUR0EQZQv3sgRNfM9mEVWPK3M6vlalczA+EECcPz3XPh6VplbErL5UoMpChhSck5wAJHthlj1bYpcmg== + dependencies: + "@babel/types" "^7.16.0" + +"@babel/helper-hoist-variables@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.16.7.tgz#86bcb19a77a509c7b77d0e22323ef588fa58c246" + integrity sha512-m04d/0Op34H5v7pbZw6pSKP7weA6lsMvfiIAMeIvkY/R4xQtBSMFEigu9QTZ2qB/9l22vsxtM8a+Q8CzD255fg== + dependencies: + "@babel/types" "^7.16.7" + +"@babel/helper-member-expression-to-functions@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.16.7.tgz#42b9ca4b2b200123c3b7e726b0ae5153924905b0" + integrity sha512-VtJ/65tYiU/6AbMTDwyoXGPKHgTsfRarivm+YbB5uAzKUyuPjgZSgAFeG87FCigc7KNHu2Pegh1XIT3lXjvz3Q== + dependencies: + "@babel/types" "^7.16.7" + +"@babel/helper-module-imports@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.16.7.tgz#25612a8091a999704461c8a222d0efec5d091437" + integrity sha512-LVtS6TqjJHFc+nYeITRo6VLXve70xmq7wPhWTqDJusJEgGmkAACWwMiTNrvfoQo6hEhFwAIixNkvB0jPXDL8Wg== + dependencies: + "@babel/types" "^7.16.7" + +"@babel/helper-module-imports@^7.8.3": + version "7.16.0" + resolved "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.16.0.tgz" + integrity sha512-kkH7sWzKPq0xt3H1n+ghb4xEMP8k0U7XV3kkB+ZGy69kDk2ySFW1qPi06sjKzFY3t1j6XbJSqr4mF9L7CYVyhg== + dependencies: + "@babel/types" "^7.16.0" + +"@babel/helper-module-transforms@^7.16.7", "@babel/helper-module-transforms@^7.9.0": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.16.7.tgz#7665faeb721a01ca5327ddc6bba15a5cb34b6a41" + integrity sha512-gaqtLDxJEFCeQbYp9aLAefjhkKdjKcdh6DB7jniIGU3Pz52WAmP268zK0VgPz9hUNkMSYeH976K2/Y6yPadpng== + dependencies: + "@babel/helper-environment-visitor" "^7.16.7" + "@babel/helper-module-imports" "^7.16.7" + "@babel/helper-simple-access" "^7.16.7" + "@babel/helper-split-export-declaration" "^7.16.7" + "@babel/helper-validator-identifier" "^7.16.7" + "@babel/template" "^7.16.7" + "@babel/traverse" "^7.16.7" + "@babel/types" "^7.16.7" + +"@babel/helper-optimise-call-expression@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.16.7.tgz#a34e3560605abbd31a18546bd2aad3e6d9a174f2" + integrity sha512-EtgBhg7rd/JcnpZFXpBy0ze1YRfdm7BnBX4uKMBd3ixa3RGAE002JZB66FJyNH7g0F38U05pXmA5P8cBh7z+1w== + dependencies: + "@babel/types" "^7.16.7" + +"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.16.7", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.16.7.tgz#aa3a8ab4c3cceff8e65eb9e73d87dc4ff320b2f5" + integrity sha512-Qg3Nk7ZxpgMrsox6HreY1ZNKdBq7K72tDSliA6dCl5f007jR4ne8iD5UzuNnCJH2xBf2BEEVGr+/OL6Gdp7RxA== + +"@babel/helper-remap-async-to-generator@^7.16.8": + version "7.16.8" + resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.16.8.tgz#29ffaade68a367e2ed09c90901986918d25e57e3" + integrity sha512-fm0gH7Flb8H51LqJHy3HJ3wnE1+qtYR2A99K06ahwrawLdOFsCEWjZOrYricXJHoPSudNKxrMBUPEIPxiIIvBw== + dependencies: + "@babel/helper-annotate-as-pure" "^7.16.7" + "@babel/helper-wrap-function" "^7.16.8" + "@babel/types" "^7.16.8" + +"@babel/helper-replace-supers@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.16.7.tgz#e9f5f5f32ac90429c1a4bdec0f231ef0c2838ab1" + integrity sha512-y9vsWilTNaVnVh6xiJfABzsNpgDPKev9HnAgz6Gb1p6UUwf9NepdlsV7VXGCftJM+jqD5f7JIEubcpLjZj5dBw== + dependencies: + "@babel/helper-environment-visitor" "^7.16.7" + "@babel/helper-member-expression-to-functions" "^7.16.7" + "@babel/helper-optimise-call-expression" "^7.16.7" + "@babel/traverse" "^7.16.7" + "@babel/types" "^7.16.7" + +"@babel/helper-simple-access@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.16.7.tgz#d656654b9ea08dbb9659b69d61063ccd343ff0f7" + integrity sha512-ZIzHVyoeLMvXMN/vok/a4LWRy8G2v205mNP0XOuf9XRLyX5/u9CnVulUtDgUTama3lT+bf/UqucuZjqiGuTS1g== + dependencies: + "@babel/types" "^7.16.7" + +"@babel/helper-skip-transparent-expression-wrappers@^7.16.0": + version "7.16.0" + resolved "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.16.0.tgz" + integrity sha512-+il1gTy0oHwUsBQZyJvukbB4vPMdcYBrFHa0Uc4AizLxbq6BOYC51Rv4tWocX9BLBDLZ4kc6qUFpQ6HRgL+3zw== + dependencies: + "@babel/types" "^7.16.0" + +"@babel/helper-split-export-declaration@^7.16.0": + version "7.16.0" + resolved "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.16.0.tgz" + integrity sha512-0YMMRpuDFNGTHNRiiqJX19GjNXA4H0E8jZ2ibccfSxaCogbm3am5WN/2nQNj0YnQwGWM1J06GOcQ2qnh3+0paw== + dependencies: + "@babel/types" "^7.16.0" + +"@babel/helper-split-export-declaration@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.16.7.tgz#0b648c0c42da9d3920d85ad585f2778620b8726b" + integrity sha512-xbWoy/PFoxSWazIToT9Sif+jJTlrMcndIsaOKvTA6u7QEo7ilkRZpjew18/W3c7nm8fXdUDXh02VXTbZ0pGDNw== + dependencies: + "@babel/types" "^7.16.7" + +"@babel/helper-validator-identifier@^7.15.7": + version "7.15.7" + resolved "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.15.7.tgz" + integrity sha512-K4JvCtQqad9OY2+yTU8w+E82ywk/fe+ELNlt1G8z3bVGlZfn/hOcQQsUhGhW/N+tb3fxK800wLtKOE/aM0m72w== + +"@babel/helper-validator-identifier@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz#e8c602438c4a8195751243da9031d1607d247cad" + integrity sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw== + +"@babel/helper-validator-option@^7.14.5": + version "7.14.5" + resolved "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.14.5.tgz" + integrity sha512-OX8D5eeX4XwcroVW45NMvoYaIuFI+GQpA2a8Gi+X/U/cDUIRsV37qQfF905F0htTRCREQIB4KqPeaveRJUl3Ow== + +"@babel/helper-validator-option@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.16.7.tgz#b203ce62ce5fe153899b617c08957de860de4d23" + integrity sha512-TRtenOuRUVo9oIQGPC5G9DgK4743cdxvtOw0weQNpZXaS16SCBi5MNjZF8vba3ETURjZpTbVn7Vvcf2eAwFozQ== + +"@babel/helper-wrap-function@^7.16.8": + version "7.16.8" + resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.16.8.tgz#58afda087c4cd235de92f7ceedebca2c41274200" + integrity sha512-8RpyRVIAW1RcDDGTA+GpPAwV22wXCfKOoM9bet6TLkGIFTkRQSkH1nMQ5Yet4MpoXe1ZwHPVtNasc2w0uZMqnw== + dependencies: + "@babel/helper-function-name" "^7.16.7" + "@babel/template" "^7.16.7" + "@babel/traverse" "^7.16.8" + "@babel/types" "^7.16.8" + +"@babel/helpers@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.16.7.tgz#7e3504d708d50344112767c3542fc5e357fffefc" + integrity sha512-9ZDoqtfY7AuEOt3cxchfii6C7GDyyMBffktR5B2jvWv8u2+efwvpnVKXMWzNehqy68tKgAfSwfdw/lWpthS2bw== + dependencies: + "@babel/template" "^7.16.7" + "@babel/traverse" "^7.16.7" + "@babel/types" "^7.16.7" + +"@babel/helpers@^7.8.3", "@babel/helpers@^7.9.6": + version "7.16.3" + resolved "https://registry.npmjs.org/@babel/helpers/-/helpers-7.16.3.tgz" + integrity sha512-Xn8IhDlBPhvYTvgewPKawhADichOsbkZuzN7qz2BusOM0brChsyXMDJvldWaYMMUNiCQdQzNEioXTp3sC8Nt8w== + dependencies: + "@babel/template" "^7.16.0" + "@babel/traverse" "^7.16.3" + "@babel/types" "^7.16.0" + +"@babel/highlight@^7.16.0": + version "7.16.0" + resolved "https://registry.npmjs.org/@babel/highlight/-/highlight-7.16.0.tgz" + integrity sha512-t8MH41kUQylBtu2+4IQA3atqevA2lRgqA2wyVB/YiWmsDSuylZZuXOUy9ric30hfzauEFfdsuk/eXTRrGrfd0g== + dependencies: + "@babel/helper-validator-identifier" "^7.15.7" + chalk "^2.0.0" + js-tokens "^4.0.0" + +"@babel/highlight@^7.16.7": + version "7.16.10" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.16.10.tgz#744f2eb81579d6eea753c227b0f570ad785aba88" + integrity sha512-5FnTQLSLswEj6IkgVw5KusNUUFY9ZGqe/TRFnP/BKYHYgfh7tc+C7mwiy95/yNP7Dh9x580Vv8r7u7ZfTBFxdw== + dependencies: + "@babel/helper-validator-identifier" "^7.16.7" + chalk "^2.0.0" + js-tokens "^4.0.0" + +"@babel/parser@^7.16.0", "@babel/parser@^7.16.3", "@babel/parser@^7.8.3", "@babel/parser@^7.8.6", "@babel/parser@^7.9.6": + version "7.16.4" + resolved "https://registry.npmjs.org/@babel/parser/-/parser-7.16.4.tgz" + integrity sha512-6V0qdPUaiVHH3RtZeLIsc+6pDhbYzHR8ogA8w+f+Wc77DuXto19g2QUwveINoS34Uw+W8/hQDGJCx+i4n7xcng== + +"@babel/parser@^7.16.10", "@babel/parser@^7.16.12", "@babel/parser@^7.16.7": + version "7.16.12" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.16.12.tgz#9474794f9a650cf5e2f892444227f98e28cdf8b6" + integrity sha512-VfaV15po8RiZssrkPweyvbGVSe4x2y+aciFCgn0n0/SJMR22cwofRV1mtnJQYcSB1wUTaA/X1LnA3es66MCO5A== + +"@babel/plugin-proposal-async-generator-functions@^7.8.3": + version "7.16.8" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.16.8.tgz#3bdd1ebbe620804ea9416706cd67d60787504bc8" + integrity sha512-71YHIvMuiuqWJQkebWJtdhQTfd4Q4mF76q2IX37uZPkG9+olBxsX+rH1vkhFto4UeJZ9dPY2s+mDvhDm1u2BGQ== + dependencies: + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-remap-async-to-generator" "^7.16.8" + "@babel/plugin-syntax-async-generators" "^7.8.4" + +"@babel/plugin-proposal-dynamic-import@^7.8.3": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.16.7.tgz#c19c897eaa46b27634a00fee9fb7d829158704b2" + integrity sha512-I8SW9Ho3/8DRSdmDdH3gORdyUuYnk1m4cMxUAdu5oy4n3OfN8flDEH+d60iG7dUfi0KkYwSvoalHzzdRzpWHTg== + dependencies: + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/plugin-syntax-dynamic-import" "^7.8.3" + +"@babel/plugin-proposal-json-strings@^7.8.3": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.16.7.tgz#9732cb1d17d9a2626a08c5be25186c195b6fa6e8" + integrity sha512-lNZ3EEggsGY78JavgbHsK9u5P3pQaW7k4axlgFLYkMd7UBsiNahCITShLjNQschPyjtO6dADrL24757IdhBrsQ== + dependencies: + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/plugin-syntax-json-strings" "^7.8.3" + +"@babel/plugin-proposal-nullish-coalescing-operator@^7.8.3": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.16.7.tgz#141fc20b6857e59459d430c850a0011e36561d99" + integrity sha512-aUOrYU3EVtjf62jQrCj63pYZ7k6vns2h/DQvHPWGmsJRYzWXZ6/AsfgpiRy6XiuIDADhJzP2Q9MwSMKauBQ+UQ== + dependencies: + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" + +"@babel/plugin-proposal-numeric-separator@^7.8.3": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.16.7.tgz#d6b69f4af63fb38b6ca2558442a7fb191236eba9" + integrity sha512-vQgPMknOIgiuVqbokToyXbkY/OmmjAzr/0lhSIbG/KmnzXPGwW/AdhdKpi+O4X/VkWiWjnkKOBiqJrTaC98VKw== + dependencies: + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/plugin-syntax-numeric-separator" "^7.10.4" + +"@babel/plugin-proposal-object-rest-spread@^7.9.6": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.16.7.tgz#94593ef1ddf37021a25bdcb5754c4a8d534b01d8" + integrity sha512-3O0Y4+dw94HA86qSg9IHfyPktgR7q3gpNVAeiKQd+8jBKFaU5NQS1Yatgo4wY+UFNuLjvxcSmzcsHqrhgTyBUA== + dependencies: + "@babel/compat-data" "^7.16.4" + "@babel/helper-compilation-targets" "^7.16.7" + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/plugin-syntax-object-rest-spread" "^7.8.3" + "@babel/plugin-transform-parameters" "^7.16.7" + +"@babel/plugin-proposal-optional-catch-binding@^7.8.3": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.16.7.tgz#c623a430674ffc4ab732fd0a0ae7722b67cb74cf" + integrity sha512-eMOH/L4OvWSZAE1VkHbr1vckLG1WUcHGJSLqqQwl2GaUqG6QjddvrOaTUMNYiv77H5IKPMZ9U9P7EaHwvAShfA== + dependencies: + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" + +"@babel/plugin-proposal-optional-chaining@^7.9.0": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.16.7.tgz#7cd629564724816c0e8a969535551f943c64c39a" + integrity sha512-eC3xy+ZrUcBtP7x+sq62Q/HYd674pPTb/77XZMb5wbDPGWIdUbSr4Agr052+zaUPSb+gGRnjxXfKFvx5iMJ+DA== + dependencies: + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-skip-transparent-expression-wrappers" "^7.16.0" + "@babel/plugin-syntax-optional-chaining" "^7.8.3" + +"@babel/plugin-proposal-unicode-property-regex@^7.4.4", "@babel/plugin-proposal-unicode-property-regex@^7.8.3": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.16.7.tgz#635d18eb10c6214210ffc5ff4932552de08188a2" + integrity sha512-QRK0YI/40VLhNVGIjRNAAQkEHws0cswSdFFjpFyt943YmJIU1da9uW63Iu6NFV6CxTZW5eTDCrwZUstBWgp/Rg== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.16.7" + "@babel/helper-plugin-utils" "^7.16.7" + +"@babel/plugin-syntax-async-generators@^7.8.0", "@babel/plugin-syntax-async-generators@^7.8.4": + version "7.8.4" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz" + integrity sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-dynamic-import@^7.8.0", "@babel/plugin-syntax-dynamic-import@^7.8.3": + version "7.8.3" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz" + integrity sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-json-strings@^7.8.0", "@babel/plugin-syntax-json-strings@^7.8.3": + version "7.8.3" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz" + integrity sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-nullish-coalescing-operator@^7.8.0", "@babel/plugin-syntax-nullish-coalescing-operator@^7.8.3": + version "7.8.3" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz" + integrity sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-numeric-separator@^7.10.4", "@babel/plugin-syntax-numeric-separator@^7.8.0": + version "7.10.4" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz" + integrity sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-syntax-object-rest-spread@^7.8.0", "@babel/plugin-syntax-object-rest-spread@^7.8.3": + version "7.8.3" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz" + integrity sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-optional-catch-binding@^7.8.0", "@babel/plugin-syntax-optional-catch-binding@^7.8.3": + version "7.8.3" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz" + integrity sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-optional-chaining@^7.8.0", "@babel/plugin-syntax-optional-chaining@^7.8.3": + version "7.8.3" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz" + integrity sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-top-level-await@^7.8.3": + version "7.14.5" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz" + integrity sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + +"@babel/plugin-transform-arrow-functions@^7.8.3": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.16.7.tgz#44125e653d94b98db76369de9c396dc14bef4154" + integrity sha512-9ffkFFMbvzTvv+7dTp/66xvZAWASuPD5Tl9LK3Z9vhOmANo6j94rik+5YMBt4CwHVMWLWpMsriIc2zsa3WW3xQ== + dependencies: + "@babel/helper-plugin-utils" "^7.16.7" + +"@babel/plugin-transform-async-to-generator@^7.8.3": + version "7.16.8" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.16.8.tgz#b83dff4b970cf41f1b819f8b49cc0cfbaa53a808" + integrity sha512-MtmUmTJQHCnyJVrScNzNlofQJ3dLFuobYn3mwOTKHnSCMtbNsqvF71GQmJfFjdrXSsAA7iysFmYWw4bXZ20hOg== + dependencies: + "@babel/helper-module-imports" "^7.16.7" + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-remap-async-to-generator" "^7.16.8" + +"@babel/plugin-transform-block-scoped-functions@^7.8.3": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.16.7.tgz#4d0d57d9632ef6062cdf354bb717102ee042a620" + integrity sha512-JUuzlzmF40Z9cXyytcbZEZKckgrQzChbQJw/5PuEHYeqzCsvebDx0K0jWnIIVcmmDOAVctCgnYs0pMcrYj2zJg== + dependencies: + "@babel/helper-plugin-utils" "^7.16.7" + +"@babel/plugin-transform-block-scoping@^7.8.3": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.16.7.tgz#f50664ab99ddeaee5bc681b8f3a6ea9d72ab4f87" + integrity sha512-ObZev2nxVAYA4bhyusELdo9hb3H+A56bxH3FZMbEImZFiEDYVHXQSJ1hQKFlDnlt8G9bBrCZ5ZpURZUrV4G5qQ== + dependencies: + "@babel/helper-plugin-utils" "^7.16.7" + +"@babel/plugin-transform-classes@^7.9.5": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.16.7.tgz#8f4b9562850cd973de3b498f1218796eb181ce00" + integrity sha512-WY7og38SFAGYRe64BrjKf8OrE6ulEHtr5jEYaZMwox9KebgqPi67Zqz8K53EKk1fFEJgm96r32rkKZ3qA2nCWQ== + dependencies: + "@babel/helper-annotate-as-pure" "^7.16.7" + "@babel/helper-environment-visitor" "^7.16.7" + "@babel/helper-function-name" "^7.16.7" + "@babel/helper-optimise-call-expression" "^7.16.7" + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-replace-supers" "^7.16.7" + "@babel/helper-split-export-declaration" "^7.16.7" + globals "^11.1.0" + +"@babel/plugin-transform-computed-properties@^7.8.3": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.16.7.tgz#66dee12e46f61d2aae7a73710f591eb3df616470" + integrity sha512-gN72G9bcmenVILj//sv1zLNaPyYcOzUho2lIJBMh/iakJ9ygCo/hEF9cpGb61SCMEDxbbyBoVQxrt+bWKu5KGw== + dependencies: + "@babel/helper-plugin-utils" "^7.16.7" + +"@babel/plugin-transform-destructuring@^7.9.5": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.16.7.tgz#ca9588ae2d63978a4c29d3f33282d8603f618e23" + integrity sha512-VqAwhTHBnu5xBVDCvrvqJbtLUa++qZaWC0Fgr2mqokBlulZARGyIvZDoqbPlPaKImQ9dKAcCzbv+ul//uqu70A== + dependencies: + "@babel/helper-plugin-utils" "^7.16.7" + +"@babel/plugin-transform-dotall-regex@^7.4.4", "@babel/plugin-transform-dotall-regex@^7.8.3": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.16.7.tgz#6b2d67686fab15fb6a7fd4bd895d5982cfc81241" + integrity sha512-Lyttaao2SjZF6Pf4vk1dVKv8YypMpomAbygW+mU5cYP3S5cWTfCJjG8xV6CFdzGFlfWK81IjL9viiTvpb6G7gQ== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.16.7" + "@babel/helper-plugin-utils" "^7.16.7" + +"@babel/plugin-transform-duplicate-keys@^7.8.3": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.16.7.tgz#2207e9ca8f82a0d36a5a67b6536e7ef8b08823c9" + integrity sha512-03DvpbRfvWIXyK0/6QiR1KMTWeT6OcQ7tbhjrXyFS02kjuX/mu5Bvnh5SDSWHxyawit2g5aWhKwI86EE7GUnTw== + dependencies: + "@babel/helper-plugin-utils" "^7.16.7" + +"@babel/plugin-transform-exponentiation-operator@^7.8.3": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.16.7.tgz#efa9862ef97e9e9e5f653f6ddc7b665e8536fe9b" + integrity sha512-8UYLSlyLgRixQvlYH3J2ekXFHDFLQutdy7FfFAMm3CPZ6q9wHCwnUyiXpQCe3gVVnQlHc5nsuiEVziteRNTXEA== + dependencies: + "@babel/helper-builder-binary-assignment-operator-visitor" "^7.16.7" + "@babel/helper-plugin-utils" "^7.16.7" + +"@babel/plugin-transform-for-of@^7.9.0": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.16.7.tgz#649d639d4617dff502a9a158c479b3b556728d8c" + integrity sha512-/QZm9W92Ptpw7sjI9Nx1mbcsWz33+l8kuMIQnDwgQBG5s3fAfQvkRjQ7NqXhtNcKOnPkdICmUHyCaWW06HCsqg== + dependencies: + "@babel/helper-plugin-utils" "^7.16.7" + +"@babel/plugin-transform-function-name@^7.8.3": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.16.7.tgz#5ab34375c64d61d083d7d2f05c38d90b97ec65cf" + integrity sha512-SU/C68YVwTRxqWj5kgsbKINakGag0KTgq9f2iZEXdStoAbOzLHEBRYzImmA6yFo8YZhJVflvXmIHUO7GWHmxxA== + dependencies: + "@babel/helper-compilation-targets" "^7.16.7" + "@babel/helper-function-name" "^7.16.7" + "@babel/helper-plugin-utils" "^7.16.7" + +"@babel/plugin-transform-literals@^7.8.3": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.16.7.tgz#254c9618c5ff749e87cb0c0cef1a0a050c0bdab1" + integrity sha512-6tH8RTpTWI0s2sV6uq3e/C9wPo4PTqqZps4uF0kzQ9/xPLFQtipynvmT1g/dOfEJ+0EQsHhkQ/zyRId8J2b8zQ== + dependencies: + "@babel/helper-plugin-utils" "^7.16.7" + +"@babel/plugin-transform-member-expression-literals@^7.8.3": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.16.7.tgz#6e5dcf906ef8a098e630149d14c867dd28f92384" + integrity sha512-mBruRMbktKQwbxaJof32LT9KLy2f3gH+27a5XSuXo6h7R3vqltl0PgZ80C8ZMKw98Bf8bqt6BEVi3svOh2PzMw== + dependencies: + "@babel/helper-plugin-utils" "^7.16.7" + +"@babel/plugin-transform-modules-amd@^7.9.6": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.16.7.tgz#b28d323016a7daaae8609781d1f8c9da42b13186" + integrity sha512-KaaEtgBL7FKYwjJ/teH63oAmE3lP34N3kshz8mm4VMAw7U3PxjVwwUmxEFksbgsNUaO3wId9R2AVQYSEGRa2+g== + dependencies: + "@babel/helper-module-transforms" "^7.16.7" + "@babel/helper-plugin-utils" "^7.16.7" + babel-plugin-dynamic-import-node "^2.3.3" + +"@babel/plugin-transform-modules-commonjs@^7.9.6": + version "7.16.8" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.16.8.tgz#cdee19aae887b16b9d331009aa9a219af7c86afe" + integrity sha512-oflKPvsLT2+uKQopesJt3ApiaIS2HW+hzHFcwRNtyDGieAeC/dIHZX8buJQ2J2X1rxGPy4eRcUijm3qcSPjYcA== + dependencies: + "@babel/helper-module-transforms" "^7.16.7" + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-simple-access" "^7.16.7" + babel-plugin-dynamic-import-node "^2.3.3" + +"@babel/plugin-transform-modules-systemjs@^7.9.6": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.16.7.tgz#887cefaef88e684d29558c2b13ee0563e287c2d7" + integrity sha512-DuK5E3k+QQmnOqBR9UkusByy5WZWGRxfzV529s9nPra1GE7olmxfqO2FHobEOYSPIjPBTr4p66YDcjQnt8cBmw== + dependencies: + "@babel/helper-hoist-variables" "^7.16.7" + "@babel/helper-module-transforms" "^7.16.7" + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-validator-identifier" "^7.16.7" + babel-plugin-dynamic-import-node "^2.3.3" + +"@babel/plugin-transform-modules-umd@^7.9.0": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.16.7.tgz#23dad479fa585283dbd22215bff12719171e7618" + integrity sha512-EMh7uolsC8O4xhudF2F6wedbSHm1HHZ0C6aJ7K67zcDNidMzVcxWdGr+htW9n21klm+bOn+Rx4CBsAntZd3rEQ== + dependencies: + "@babel/helper-module-transforms" "^7.16.7" + "@babel/helper-plugin-utils" "^7.16.7" + +"@babel/plugin-transform-named-capturing-groups-regex@^7.8.3": + version "7.16.8" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.16.8.tgz#7f860e0e40d844a02c9dcf9d84965e7dfd666252" + integrity sha512-j3Jw+n5PvpmhRR+mrgIh04puSANCk/T/UA3m3P1MjJkhlK906+ApHhDIqBQDdOgL/r1UYpz4GNclTXxyZrYGSw== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.16.7" + +"@babel/plugin-transform-new-target@^7.8.3": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.16.7.tgz#9967d89a5c243818e0800fdad89db22c5f514244" + integrity sha512-xiLDzWNMfKoGOpc6t3U+etCE2yRnn3SM09BXqWPIZOBpL2gvVrBWUKnsJx0K/ADi5F5YC5f8APFfWrz25TdlGg== + dependencies: + "@babel/helper-plugin-utils" "^7.16.7" + +"@babel/plugin-transform-object-super@^7.8.3": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.16.7.tgz#ac359cf8d32cf4354d27a46867999490b6c32a94" + integrity sha512-14J1feiQVWaGvRxj2WjyMuXS2jsBkgB3MdSN5HuC2G5nRspa5RK9COcs82Pwy5BuGcjb+fYaUj94mYcOj7rCvw== + dependencies: + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-replace-supers" "^7.16.7" + +"@babel/plugin-transform-parameters@^7.16.7", "@babel/plugin-transform-parameters@^7.9.5": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.16.7.tgz#a1721f55b99b736511cb7e0152f61f17688f331f" + integrity sha512-AT3MufQ7zZEhU2hwOA11axBnExW0Lszu4RL/tAlUJBuNoRak+wehQW8h6KcXOcgjY42fHtDxswuMhMjFEuv/aw== + dependencies: + "@babel/helper-plugin-utils" "^7.16.7" + +"@babel/plugin-transform-property-literals@^7.8.3": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.16.7.tgz#2dadac85155436f22c696c4827730e0fe1057a55" + integrity sha512-z4FGr9NMGdoIl1RqavCqGG+ZuYjfZ/hkCIeuH6Do7tXmSm0ls11nYVSJqFEUOSJbDab5wC6lRE/w6YjVcr6Hqw== + dependencies: + "@babel/helper-plugin-utils" "^7.16.7" + +"@babel/plugin-transform-regenerator@^7.8.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.16.7.tgz#9e7576dc476cb89ccc5096fff7af659243b4adeb" + integrity sha512-mF7jOgGYCkSJagJ6XCujSQg+6xC1M77/03K2oBmVJWoFGNUtnVJO4WHKJk3dnPC8HCcj4xBQP1Egm8DWh3Pb3Q== + dependencies: + regenerator-transform "^0.14.2" + +"@babel/plugin-transform-reserved-words@^7.8.3": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.16.7.tgz#1d798e078f7c5958eec952059c460b220a63f586" + integrity sha512-KQzzDnZ9hWQBjwi5lpY5v9shmm6IVG0U9pB18zvMu2i4H90xpT4gmqwPYsn8rObiadYe2M0gmgsiOIF5A/2rtg== + dependencies: + "@babel/helper-plugin-utils" "^7.16.7" + +"@babel/plugin-transform-runtime@7.9.6": + version "7.9.6" + resolved "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.9.6.tgz" + integrity sha512-qcmiECD0mYOjOIt8YHNsAP1SxPooC/rDmfmiSK9BNY72EitdSc7l44WTEklaWuFtbOEBjNhWWyph/kOImbNJ4w== + dependencies: + "@babel/helper-module-imports" "^7.8.3" + "@babel/helper-plugin-utils" "^7.8.3" + resolve "^1.8.1" + semver "^5.5.1" + +"@babel/plugin-transform-shorthand-properties@^7.8.3": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.16.7.tgz#e8549ae4afcf8382f711794c0c7b6b934c5fbd2a" + integrity sha512-hah2+FEnoRoATdIb05IOXf+4GzXYTq75TVhIn1PewihbpyrNWUt2JbudKQOETWw6QpLe+AIUpJ5MVLYTQbeeUg== + dependencies: + "@babel/helper-plugin-utils" "^7.16.7" + +"@babel/plugin-transform-spread@^7.8.3": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.16.7.tgz#a303e2122f9f12e0105daeedd0f30fb197d8ff44" + integrity sha512-+pjJpgAngb53L0iaA5gU/1MLXJIfXcYepLgXB3esVRf4fqmj8f2cxM3/FKaHsZms08hFQJkFccEWuIpm429TXg== + dependencies: + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-skip-transparent-expression-wrappers" "^7.16.0" + +"@babel/plugin-transform-sticky-regex@^7.8.3": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.16.7.tgz#c84741d4f4a38072b9a1e2e3fd56d359552e8660" + integrity sha512-NJa0Bd/87QV5NZZzTuZG5BPJjLYadeSZ9fO6oOUoL4iQx+9EEuw/eEM92SrsT19Yc2jgB1u1hsjqDtH02c3Drw== + dependencies: + "@babel/helper-plugin-utils" "^7.16.7" + +"@babel/plugin-transform-template-literals@^7.8.3": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.16.7.tgz#f3d1c45d28967c8e80f53666fc9c3e50618217ab" + integrity sha512-VwbkDDUeenlIjmfNeDX/V0aWrQH2QiVyJtwymVQSzItFDTpxfyJh3EVaQiS0rIN/CqbLGr0VcGmuwyTdZtdIsA== + dependencies: + "@babel/helper-plugin-utils" "^7.16.7" + +"@babel/plugin-transform-typeof-symbol@^7.8.4": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.16.7.tgz#9cdbe622582c21368bd482b660ba87d5545d4f7e" + integrity sha512-p2rOixCKRJzpg9JB4gjnG4gjWkWa89ZoYUnl9snJ1cWIcTH/hvxZqfO+WjG6T8DRBpctEol5jw1O5rA8gkCokQ== + dependencies: + "@babel/helper-plugin-utils" "^7.16.7" + +"@babel/plugin-transform-unicode-regex@^7.8.3": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.16.7.tgz#0f7aa4a501198976e25e82702574c34cfebe9ef2" + integrity sha512-oC5tYYKw56HO75KZVLQ+R/Nl3Hro9kf8iG0hXoaHP7tjAyCpvqBiSNe6vGrZni1Z6MggmUOC6A7VP7AVmw225Q== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.16.7" + "@babel/helper-plugin-utils" "^7.16.7" + +"@babel/preset-env@7.9.6": + version "7.9.6" + resolved "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.9.6.tgz" + integrity sha512-0gQJ9RTzO0heXOhzftog+a/WyOuqMrAIugVYxMYf83gh1CQaQDjMtsOpqOwXyDL/5JcWsrCm8l4ju8QC97O7EQ== + dependencies: + "@babel/compat-data" "^7.9.6" + "@babel/helper-compilation-targets" "^7.9.6" + "@babel/helper-module-imports" "^7.8.3" + "@babel/helper-plugin-utils" "^7.8.3" + "@babel/plugin-proposal-async-generator-functions" "^7.8.3" + "@babel/plugin-proposal-dynamic-import" "^7.8.3" + "@babel/plugin-proposal-json-strings" "^7.8.3" + "@babel/plugin-proposal-nullish-coalescing-operator" "^7.8.3" + "@babel/plugin-proposal-numeric-separator" "^7.8.3" + "@babel/plugin-proposal-object-rest-spread" "^7.9.6" + "@babel/plugin-proposal-optional-catch-binding" "^7.8.3" + "@babel/plugin-proposal-optional-chaining" "^7.9.0" + "@babel/plugin-proposal-unicode-property-regex" "^7.8.3" + "@babel/plugin-syntax-async-generators" "^7.8.0" + "@babel/plugin-syntax-dynamic-import" "^7.8.0" + "@babel/plugin-syntax-json-strings" "^7.8.0" + "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.0" + "@babel/plugin-syntax-numeric-separator" "^7.8.0" + "@babel/plugin-syntax-object-rest-spread" "^7.8.0" + "@babel/plugin-syntax-optional-catch-binding" "^7.8.0" + "@babel/plugin-syntax-optional-chaining" "^7.8.0" + "@babel/plugin-syntax-top-level-await" "^7.8.3" + "@babel/plugin-transform-arrow-functions" "^7.8.3" + "@babel/plugin-transform-async-to-generator" "^7.8.3" + "@babel/plugin-transform-block-scoped-functions" "^7.8.3" + "@babel/plugin-transform-block-scoping" "^7.8.3" + "@babel/plugin-transform-classes" "^7.9.5" + "@babel/plugin-transform-computed-properties" "^7.8.3" + "@babel/plugin-transform-destructuring" "^7.9.5" + "@babel/plugin-transform-dotall-regex" "^7.8.3" + "@babel/plugin-transform-duplicate-keys" "^7.8.3" + "@babel/plugin-transform-exponentiation-operator" "^7.8.3" + "@babel/plugin-transform-for-of" "^7.9.0" + "@babel/plugin-transform-function-name" "^7.8.3" + "@babel/plugin-transform-literals" "^7.8.3" + "@babel/plugin-transform-member-expression-literals" "^7.8.3" + "@babel/plugin-transform-modules-amd" "^7.9.6" + "@babel/plugin-transform-modules-commonjs" "^7.9.6" + "@babel/plugin-transform-modules-systemjs" "^7.9.6" + "@babel/plugin-transform-modules-umd" "^7.9.0" + "@babel/plugin-transform-named-capturing-groups-regex" "^7.8.3" + "@babel/plugin-transform-new-target" "^7.8.3" + "@babel/plugin-transform-object-super" "^7.8.3" + "@babel/plugin-transform-parameters" "^7.9.5" + "@babel/plugin-transform-property-literals" "^7.8.3" + "@babel/plugin-transform-regenerator" "^7.8.7" + "@babel/plugin-transform-reserved-words" "^7.8.3" + "@babel/plugin-transform-shorthand-properties" "^7.8.3" + "@babel/plugin-transform-spread" "^7.8.3" + "@babel/plugin-transform-sticky-regex" "^7.8.3" + "@babel/plugin-transform-template-literals" "^7.8.3" + "@babel/plugin-transform-typeof-symbol" "^7.8.4" + "@babel/plugin-transform-unicode-regex" "^7.8.3" + "@babel/preset-modules" "^0.1.3" + "@babel/types" "^7.9.6" + browserslist "^4.11.1" + core-js-compat "^3.6.2" + invariant "^2.2.2" + levenary "^1.1.1" + semver "^5.5.0" + +"@babel/preset-modules@^0.1.3": + version "0.1.5" + resolved "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.5.tgz" + integrity sha512-A57th6YRG7oR3cq/yt/Y84MvGgE0eJG2F1JLhKuyG+jFxEgrd/HAMJatiFtmOiZurz+0DkrvbheCLaV5f2JfjA== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/plugin-proposal-unicode-property-regex" "^7.4.4" + "@babel/plugin-transform-dotall-regex" "^7.4.4" + "@babel/types" "^7.4.4" + esutils "^2.0.2" + +"@babel/runtime@7.9.6": + version "7.9.6" + resolved "https://registry.npmjs.org/@babel/runtime/-/runtime-7.9.6.tgz" + integrity sha512-64AF1xY3OAkFHqOb9s4jpgk1Mm5vDZ4L3acHvAml+53nO1XbXLuDodsVpO4OIUsmemlUHMxNdYMNJmsvOwLrvQ== + dependencies: + regenerator-runtime "^0.13.4" + +"@babel/runtime@^7.10.2", "@babel/runtime@^7.8.4": + version "7.16.3" + resolved "https://registry.npmjs.org/@babel/runtime/-/runtime-7.16.3.tgz" + integrity sha512-WBwekcqacdY2e9AF/Q7WLFUWmdJGJTkbjqTjoMDgXkVZ3ZRUvOPsLb5KdwISoQVsbP+DQzVZW4Zhci0DvpbNTQ== + dependencies: + regenerator-runtime "^0.13.4" + +"@babel/template@7.8.6": + version "7.8.6" + resolved "https://registry.npmjs.org/@babel/template/-/template-7.8.6.tgz" + integrity sha512-zbMsPMy/v0PWFZEhQJ66bqjhH+z0JgMoBWuikXybgG3Gkd/3t5oQ1Rw2WQhnSrsOmsKXnZOx15tkC4qON/+JPg== + dependencies: + "@babel/code-frame" "^7.8.3" + "@babel/parser" "^7.8.6" + "@babel/types" "^7.8.6" + +"@babel/template@^7.16.0", "@babel/template@^7.8.3", "@babel/template@^7.8.6": + version "7.16.0" + resolved "https://registry.npmjs.org/@babel/template/-/template-7.16.0.tgz" + integrity sha512-MnZdpFD/ZdYhXwiunMqqgyZyucaYsbL0IrjoGjaVhGilz+x8YB++kRfygSOIj1yOtWKPlx7NBp+9I1RQSgsd5A== + dependencies: + "@babel/code-frame" "^7.16.0" + "@babel/parser" "^7.16.0" + "@babel/types" "^7.16.0" + +"@babel/template@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.16.7.tgz#8d126c8701fde4d66b264b3eba3d96f07666d155" + integrity sha512-I8j/x8kHUrbYRTUxXrrMbfCa7jxkE7tZre39x3kjr9hvI82cK1FfqLygotcWN5kdPGWcLdWMHpSBavse5tWw3w== + dependencies: + "@babel/code-frame" "^7.16.7" + "@babel/parser" "^7.16.7" + "@babel/types" "^7.16.7" + +"@babel/traverse@^7.16.10", "@babel/traverse@^7.16.7", "@babel/traverse@^7.16.8": + version "7.16.10" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.16.10.tgz#448f940defbe95b5a8029975b051f75993e8239f" + integrity sha512-yzuaYXoRJBGMlBhsMJoUW7G1UmSb/eXr/JHYM/MsOJgavJibLwASijW7oXBdw3NQ6T0bW7Ty5P/VarOs9cHmqw== + dependencies: + "@babel/code-frame" "^7.16.7" + "@babel/generator" "^7.16.8" + "@babel/helper-environment-visitor" "^7.16.7" + "@babel/helper-function-name" "^7.16.7" + "@babel/helper-hoist-variables" "^7.16.7" + "@babel/helper-split-export-declaration" "^7.16.7" + "@babel/parser" "^7.16.10" + "@babel/types" "^7.16.8" + debug "^4.1.0" + globals "^11.1.0" + +"@babel/traverse@^7.16.3", "@babel/traverse@^7.8.3", "@babel/traverse@^7.9.6": + version "7.16.3" + resolved "https://registry.npmjs.org/@babel/traverse/-/traverse-7.16.3.tgz" + integrity sha512-eolumr1vVMjqevCpwVO99yN/LoGL0EyHiLO5I043aYQvwOJ9eR5UsZSClHVCzfhBduMAsSzgA/6AyqPjNayJag== + dependencies: + "@babel/code-frame" "^7.16.0" + "@babel/generator" "^7.16.0" + "@babel/helper-function-name" "^7.16.0" + "@babel/helper-hoist-variables" "^7.16.0" + "@babel/helper-split-export-declaration" "^7.16.0" + "@babel/parser" "^7.16.3" + "@babel/types" "^7.16.0" + debug "^4.1.0" + globals "^11.1.0" + +"@babel/types@^7.16.0", "@babel/types@^7.4.4", "@babel/types@^7.8.3", "@babel/types@^7.8.6", "@babel/types@^7.9.6": + version "7.16.0" + resolved "https://registry.npmjs.org/@babel/types/-/types-7.16.0.tgz" + integrity sha512-PJgg/k3SdLsGb3hhisFvtLOw5ts113klrpLuIPtCJIU+BB24fqq6lf8RWqKJEjzqXR9AEH1rIb5XTqwBHB+kQg== + dependencies: + "@babel/helper-validator-identifier" "^7.15.7" + to-fast-properties "^2.0.0" + +"@babel/types@^7.16.7", "@babel/types@^7.16.8": + version "7.16.8" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.16.8.tgz#0ba5da91dd71e0a4e7781a30f22770831062e3c1" + integrity sha512-smN2DQc5s4M7fntyjGtyIPbRJv6wW4rU/94fmYJ7PKQuZkC0qGMHXJbg6sNGt12JmVr4k5YaptI/XtiLJBnmIg== + dependencies: + "@babel/helper-validator-identifier" "^7.16.7" + to-fast-properties "^2.0.0" + +"@fortawesome/fontawesome-free@^5.15.4": + version "5.15.4" + resolved "https://registry.npmjs.org/@fortawesome/fontawesome-free/-/fontawesome-free-5.15.4.tgz" + integrity sha512-eYm8vijH/hpzr/6/1CJ/V/Eb1xQFW2nnUKArb3z+yUWv7HTwj6M7SP957oMjfZjAHU6qpoNc2wQvIxBLWYa/Jg== + +"@gar/promisify@^1.0.1": + version "1.1.2" + resolved "https://registry.npmjs.org/@gar/promisify/-/promisify-1.1.2.tgz" + integrity sha512-82cpyJyKRoQoRi+14ibCeGPu0CwypgtBAdBhq1WfvagpCZNKqwXbKwXllYSMG91DhmG4jt9gN8eP6lGOtozuaw== + +"@istanbuljs/schema@^0.1.2": + version "0.1.3" + resolved "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz" + integrity sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA== + +"@jsdevtools/coverage-istanbul-loader@3.0.3": + version "3.0.3" + resolved "https://registry.npmjs.org/@jsdevtools/coverage-istanbul-loader/-/coverage-istanbul-loader-3.0.3.tgz" + integrity sha512-TAdNkeGB5Fe4Og+ZkAr1Kvn9by2sfL44IAHFtxlh1BA1XJ5cLpO9iSNki5opWESv3l3vSHsZ9BNKuqFKbEbFaA== + dependencies: + convert-source-map "^1.7.0" + istanbul-lib-instrument "^4.0.1" + loader-utils "^1.4.0" + merge-source-map "^1.1.0" + schema-utils "^2.6.4" + +"@jsonforms/angular-material@^2.5.0": + version "2.5.2" + resolved "https://registry.npmjs.org/@jsonforms/angular-material/-/angular-material-2.5.2.tgz" + integrity sha512-6GHPPWPtZOWZIx2kBrP9lmB8s0SCBBRn9lI0Vi5rOCnY33d3PR2ubNJ1XP5TGK2vTJBe7+tOXSKKspRqgyH+ig== + dependencies: + hammerjs "2.0.8" + +"@jsonforms/angular@^2.5.0": + version "2.5.2" + resolved "https://registry.npmjs.org/@jsonforms/angular/-/angular-2.5.2.tgz" + integrity sha512-6nA0Mr93bKCwVmsNoCfAgguyviFbH59ZCtq0ScY4XWKeZnOPErnRlE2I/SW3iac2m7kEMsBVnLocdRtnDlii4w== + +"@jsonforms/core@^2.5.0": + version "2.5.2" + resolved "https://registry.npmjs.org/@jsonforms/core/-/core-2.5.2.tgz" + integrity sha512-tl64cLC2dUrGvu2nTHRDEA5Yv3RfwzMCIlVaoSUSq44LakKLGJdkPl8j/fb07llpFqz0a7gEAmy/8gLdmwgaLQ== + dependencies: + "@types/json-schema" "^7.0.3" + ajv "^6.10.2" + json-schema-ref-parser "7.1.3" + lodash "^4.17.15" + uri-js "^4.2.2" + uuid "^3.3.3" + +"@material/animation@^13.0.0": + version "13.0.0" + resolved "https://registry.npmjs.org/@material/animation/-/animation-13.0.0.tgz" + integrity sha512-YR0/u4u56qXDjKYolQ7F+IvlPkaSBhMl/dZv8DK0FbD6PH4ckOPd3bEXNRndXtprsxwknQQP2pttjPImylkl0g== + dependencies: + tslib "^2.1.0" + +"@material/base@^13.0.0": + version "13.0.0" + resolved "https://registry.npmjs.org/@material/base/-/base-13.0.0.tgz" + integrity sha512-vFx0JryRfcvUNX3cZ2u32wUMvxzd+c/YW0LFOXNgqCDWlubHcMm0Y6Wz371LhfQo80/NE69u+/4Joo99yKnVeg== + dependencies: + tslib "^2.1.0" + +"@material/dom@^13.0.0": + version "13.0.0" + resolved "https://registry.npmjs.org/@material/dom/-/dom-13.0.0.tgz" + integrity sha512-M9HLAYBZtkTUvf66FL+jAEvUOdhji1HkGA1mV6oyE+HY9gkCkmso+mngvzlLd5+uaAVE9I3WQFhSb9gp0cpXnw== + dependencies: + "@material/feature-targeting" "^13.0.0" + tslib "^2.1.0" + +"@material/elevation@^13.0.0": + version "13.0.0" + resolved "https://registry.npmjs.org/@material/elevation/-/elevation-13.0.0.tgz" + integrity sha512-hzdblgamVRbC0UwKafcvUVDvKzMiOSveDiwGgFk+EAg/tZRdwMlQPyf/9I6Lr8Cw/pNGnEOPhmCDOYPOHimr0w== + dependencies: + "@material/animation" "^13.0.0" + "@material/base" "^13.0.0" + "@material/feature-targeting" "^13.0.0" + "@material/rtl" "^13.0.0" + "@material/theme" "^13.0.0" + tslib "^2.1.0" + +"@material/fab@^13.0.0": + version "13.0.0" + resolved "https://registry.npmjs.org/@material/fab/-/fab-13.0.0.tgz" + integrity sha512-qOi+XWEZWUR5T961UjSorgqm5VaanuZtRN3nsrKqHH1p0L8fYRc3qkGIChlaY9p7BcOYMCynXJzT+MfELVrcwA== + dependencies: + "@material/animation" "^13.0.0" + "@material/dom" "^13.0.0" + "@material/elevation" "^13.0.0" + "@material/feature-targeting" "^13.0.0" + "@material/ripple" "^13.0.0" + "@material/rtl" "^13.0.0" + "@material/shape" "^13.0.0" + "@material/theme" "^13.0.0" + "@material/tokens" "^13.0.0" + "@material/touch-target" "^13.0.0" + "@material/typography" "^13.0.0" + tslib "^2.1.0" + +"@material/feature-targeting@^13.0.0": + version "13.0.0" + resolved "https://registry.npmjs.org/@material/feature-targeting/-/feature-targeting-13.0.0.tgz" + integrity sha512-QJClfeaA4EMyAxKJy9WR0Nx+/VwSZCkhGLUVBG9NhxqYGfl/LtaeaidrNm32vYEoNZAofN92VD2RwQTRwp/dMQ== + dependencies: + tslib "^2.1.0" + +"@material/ripple@^13.0.0": + version "13.0.0" + resolved "https://registry.npmjs.org/@material/ripple/-/ripple-13.0.0.tgz" + integrity sha512-hx4B40hB2rRfsGwf1jwo2GGlYDq0yUQjcMcMmXfQipPJNpQhy8ylmXKc1DBjmWf7EQ/MgbfCSYwPrYXrbGP31w== + dependencies: + "@material/animation" "^13.0.0" + "@material/base" "^13.0.0" + "@material/dom" "^13.0.0" + "@material/feature-targeting" "^13.0.0" + "@material/rtl" "^13.0.0" + "@material/theme" "^13.0.0" + tslib "^2.1.0" + +"@material/rtl@^13.0.0": + version "13.0.0" + resolved "https://registry.npmjs.org/@material/rtl/-/rtl-13.0.0.tgz" + integrity sha512-nFGy3iQg7k+xLs67eb86mRFVLwa0yi7MusqRK4OM8DXcLO5yoVfUTPKpdSykcbRryp9imVHsxutox2tZawR4og== + dependencies: + "@material/theme" "^13.0.0" + tslib "^2.1.0" + +"@material/shape@^13.0.0": + version "13.0.0" + resolved "https://registry.npmjs.org/@material/shape/-/shape-13.0.0.tgz" + integrity sha512-exk96+iCjzCujk3aSrvIMhmW773s1Tc0h+MbQKbt6Iv3nHJCyLSiRbxclCHXWHrVwG/9KZRkrt/g2qk7P3VRBg== + dependencies: + "@material/feature-targeting" "^13.0.0" + "@material/rtl" "^13.0.0" + "@material/theme" "^13.0.0" + tslib "^2.1.0" + +"@material/theme@^13.0.0": + version "13.0.0" + resolved "https://registry.npmjs.org/@material/theme/-/theme-13.0.0.tgz" + integrity sha512-KAe1s0MvvfCGAwJliDVTvgAKuD3ESwhl7F7br4Iam4IPdqME2rWl8NPhKHFfaWqTG7PyCgMMngYEYuA8cLNTsA== + dependencies: + "@material/feature-targeting" "^13.0.0" + tslib "^2.1.0" + +"@material/tokens@^13.0.0": + version "13.0.0" + resolved "https://registry.npmjs.org/@material/tokens/-/tokens-13.0.0.tgz" + integrity sha512-t55CKVeAjABdSQCKjsvYvqrA6Z4f5varLpLloai8ZQU0giSl7qbUczV1i8y2pSOzpRTswD5JKM7a19qfsl/TCA== + dependencies: + "@material/elevation" "^13.0.0" + +"@material/touch-target@^13.0.0": + version "13.0.0" + resolved "https://registry.npmjs.org/@material/touch-target/-/touch-target-13.0.0.tgz" + integrity sha512-2BMjj+nwKIYG7cZZGcNuRSKo53knqDu9ksv9wLidxjLgzqXBd1v9gdXsqMRQXepoOqftWGmYMaRYI0xMnxt6lA== + dependencies: + "@material/base" "^13.0.0" + "@material/feature-targeting" "^13.0.0" + "@material/rtl" "^13.0.0" + tslib "^2.1.0" + +"@material/typography@^13.0.0": + version "13.0.0" + resolved "https://registry.npmjs.org/@material/typography/-/typography-13.0.0.tgz" + integrity sha512-UfaK4vT3LmGiiySf2RVIrf7fJZa6EJadFwo4YUMJx9bvUMRlBm1oI8Vo9fYpKdLfuSTeA+2BlgbwYVObj3laFw== + dependencies: + "@material/feature-targeting" "^13.0.0" + "@material/theme" "^13.0.0" + tslib "^2.1.0" + +"@ng-bootstrap/ng-bootstrap@^8.0.4": + version "8.0.4" + resolved "https://registry.npmjs.org/@ng-bootstrap/ng-bootstrap/-/ng-bootstrap-8.0.4.tgz" + integrity sha512-EdxTwOPOtlvfnwrglPniulmzdnXdXH3lTGaGAY1HrYRvdtGg6wicRvl+BvwVE/3Qik5NPkOWMVghUHpv3evIYg== + dependencies: + tslib "^2.0.0" + +"@ng-select/ng-select@^7.2.0": + version "7.4.0" + resolved "https://registry.npmjs.org/@ng-select/ng-select/-/ng-select-7.4.0.tgz" + integrity sha512-Mn+gUA5KV2740zQHr4Zkc1tyTqeDE67tm4Cz4+miONWIPFP9KfxQ26goRDS8vT43zbDefalPQWH1thX+8NBRGg== + dependencies: + tslib "^2.0.0" + +"@ngtools/webpack@10.0.8": + version "10.0.8" + resolved "https://registry.npmjs.org/@ngtools/webpack/-/webpack-10.0.8.tgz" + integrity sha512-Qv4v7O4VGeWuXjRThd/mdC2I4cJOgQ7kDrVN7vkDB2EW5xtRB+/4hghvFeO3bD11FLuFvCxBMb0HbwyKoVQgEQ== + dependencies: + "@angular-devkit/core" "10.0.8" + enhanced-resolve "4.1.1" + rxjs "6.5.5" + webpack-sources "1.4.3" + +"@ngx-formly/bootstrap@^5.10.21": + version "5.10.25" + resolved "https://registry.npmjs.org/@ngx-formly/bootstrap/-/bootstrap-5.10.25.tgz" + integrity sha512-xHxJY9sGFLQ7At8xKqmhX9jBE4SlAXkxw5yQXH4fS1Op98qF/zYxrZtX1YpO69mBuvzz/625PjjvoIyrj1ys3A== + dependencies: + tslib "^1.9.0" + +"@ngx-formly/core@^5.10.22": + version "5.10.25" + resolved "https://registry.npmjs.org/@ngx-formly/core/-/core-5.10.25.tgz" + integrity sha512-TErHzIyIbkrPvgjaMCewJN2u7GBL/6SNc5KmcwKhSEOieyDe0HIh0eUpSYBK42zVIvfQdDMWTms2DdsEV5kUJA== + dependencies: + tslib "^1.7.1" + +"@ngx-formly/material@^5.10.22": + version "5.10.25" + resolved "https://registry.npmjs.org/@ngx-formly/material/-/material-5.10.25.tgz" + integrity sha512-BzuD2vag4Qys8dbD7K4EZprKHZEMDp+zLNS1N+YnPpQdgqzTL+OKesnmHvQ7op8VNJO3q+WNHpOhm5s/hSavmA== + dependencies: + tslib "^1.9.0" + +"@ngx-formly/schematics@^5.10.21": + version "5.10.25" + resolved "https://registry.npmjs.org/@ngx-formly/schematics/-/schematics-5.10.25.tgz" + integrity sha512-mmjyObv78QYm6kz7nHBlOJcLclaHMqLezogNuhR/PVvAf3+b6gqjhSvCBP9nSnPeBZAZpvR081g5+RJ2j3SkdQ== + dependencies: + "@angular-devkit/core" ">=7.0.0" + "@angular-devkit/schematics" ">=7.0.0" + "@schematics/angular" ">=7.0.0" + +"@ngx-translate/core@^13.0.0": + version "13.0.0" + resolved "https://registry.yarnpkg.com/@ngx-translate/core/-/core-13.0.0.tgz#60547cb8a0845a2a0abfde6b0bf5ec6516a63fd6" + integrity sha512-+tzEp8wlqEnw0Gc7jtVRAJ6RteUjXw6JJR4O65KlnxOmJrCGPI0xjV/lKRnQeU0w4i96PQs/jtpL921Wrb7PWg== + dependencies: + tslib "^2.0.0" + +"@ngx-translate/http-loader@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@ngx-translate/http-loader/-/http-loader-7.0.0.tgz#905f38d8d13342621516635bf480ff9a4f73e9fc" + integrity sha512-j+NpXXlcGVdyUNyY/qsJrqqeAdJdizCd+GKh3usXExSqy1aE9866jlAIL+xrfDU4w+LiMoma5pgE4emvFebZmA== + dependencies: + tslib "^2.3.0" + +"@nodelib/fs.scandir@2.1.5": + version "2.1.5" + resolved "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz" + integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g== + dependencies: + "@nodelib/fs.stat" "2.0.5" + run-parallel "^1.1.9" + +"@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2": + version "2.0.5" + resolved "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz" + integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== + +"@nodelib/fs.walk@^1.2.3": + version "1.2.8" + resolved "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz" + integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg== + dependencies: + "@nodelib/fs.scandir" "2.1.5" + fastq "^1.6.0" + +"@npmcli/fs@^1.0.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@npmcli/fs/-/fs-1.1.0.tgz#bec1d1b89c170d40e1b73ad6c943b0b75e7d2951" + integrity sha512-VhP1qZLXcrXRIaPoqb4YA55JQxLNF3jNR4T55IdOJa3+IFJKNYHtPvtXx8slmeMavj37vCzCfrqQM1vWLsYKLA== + dependencies: + "@gar/promisify" "^1.0.1" + semver "^7.3.5" + +"@npmcli/move-file@^1.0.1": + version "1.1.2" + resolved "https://registry.npmjs.org/@npmcli/move-file/-/move-file-1.1.2.tgz" + integrity sha512-1SUf/Cg2GzGDyaf15aR9St9TWlb+XvbZXWpDx8YKs7MLzMH/BCeopv+y9vzrzgkfykCGuWOlSu3mZhj2+FQcrg== + dependencies: + mkdirp "^1.0.4" + rimraf "^3.0.2" + +"@schematics/angular@10.2.3": + version "10.2.3" + resolved "https://registry.npmjs.org/@schematics/angular/-/angular-10.2.3.tgz" + integrity sha512-xcnfH5XMmGcs33VHm2cu0+4g3rkfSD+qpiKFjfg7KGC4lLoOKSED4ZnjzIYwcQ6QN4gTpAvlZKxI8zO7NkKv0A== + dependencies: + "@angular-devkit/core" "10.2.3" + "@angular-devkit/schematics" "10.2.3" + jsonc-parser "2.3.0" + +"@schematics/angular@>=7.0.0": + version "13.0.4" + resolved "https://registry.npmjs.org/@schematics/angular/-/angular-13.0.4.tgz" + integrity sha512-P9F5c8ApLbEyfNO4TZNsTyAdrtOjwIhrM/P+eEC4/x6nklWlEFE6TGMYTNjiK/RRhkbX1tBs8gcdJLYxtEqPSg== + dependencies: + "@angular-devkit/core" "13.0.4" + "@angular-devkit/schematics" "13.0.4" + jsonc-parser "3.0.0" + +"@schematics/update@0.1002.3": + version "0.1002.3" + resolved "https://registry.npmjs.org/@schematics/update/-/update-0.1002.3.tgz" + integrity sha512-UnuMgRQtAOp/Pk9rSYW12medajXe9s5mW4a6foixC/B2UCFFlIAVbFBTiFpr69xbalfLlFcFx1MD+8/8njWtbQ== + dependencies: + "@angular-devkit/core" "10.2.3" + "@angular-devkit/schematics" "10.2.3" + "@yarnpkg/lockfile" "1.1.0" + ini "1.3.6" + npm-package-arg "^8.0.0" + pacote "9.5.12" + semver "7.3.2" + semver-intersect "1.4.0" + +"@tweenjs/tween.js@^17.4.0": + version "17.6.0" + resolved "https://registry.npmjs.org/@tweenjs/tween.js/-/tween.js-17.6.0.tgz" + integrity sha512-utSXj0WHi4qr/iyfFHGMJBaL+ixQ2N7BAmx1R5g8jBqykJfjBUQ0hKWwXf767hbALC3zOoOIofKYSDWu5n04JQ== + +"@types/glob@^7.1.1": + version "7.2.0" + resolved "https://registry.npmjs.org/@types/glob/-/glob-7.2.0.tgz" + integrity sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA== + dependencies: + "@types/minimatch" "*" + "@types/node" "*" + +"@types/jasmine@*": + version "3.10.2" + resolved "https://registry.npmjs.org/@types/jasmine/-/jasmine-3.10.2.tgz" + integrity sha512-qs4xjVm4V/XjM6owGm/x6TNmhGl5iKX8dkTdsgdgl9oFnqgzxLepnS7rN9Tdo7kDmnFD/VEqKrW57cGD2odbEg== + +"@types/jasmine@~2.8.3": + version "2.8.18" + resolved "https://registry.npmjs.org/@types/jasmine/-/jasmine-2.8.18.tgz" + integrity sha512-CYOO2DsfoFnmYQ+tZyXsExePUomwvUhpSLEsM7kAJ5BSYNlom+5m3qZkxYrg2CoSfJ3tMv5NH02cB0y7GfjvaA== + +"@types/jasminewd2@~2.0.2": + version "2.0.10" + resolved "https://registry.npmjs.org/@types/jasminewd2/-/jasminewd2-2.0.10.tgz" + integrity sha512-J7mDz7ovjwjc+Y9rR9rY53hFWKATcIkrr9DwQWmOas4/pnIPJTXawnzjwpHm3RSxz/e3ZVUvQ7cRbd5UQLo10g== + dependencies: + "@types/jasmine" "*" + +"@types/json-schema@^7.0.3", "@types/json-schema@^7.0.5", "@types/json-schema@^7.0.8": + version "7.0.9" + resolved "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.9.tgz" + integrity sha512-qcUXuemtEu+E5wZSJHNxUXeCZhAfXKQ41D+duX+VYPde7xyEVZci+/oXKJL13tnRs9lR2pr4fod59GT6/X1/yQ== + +"@types/minimatch@*": + version "3.0.5" + resolved "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.5.tgz" + integrity sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ== + +"@types/node@*", "@types/node@^12.11.1": + version "12.20.37" + resolved "https://registry.npmjs.org/@types/node/-/node-12.20.37.tgz" + integrity sha512-i1KGxqcvJaLQali+WuypQnXwcplhtNtjs66eNsZpp2P2FL/trJJxx/VWsM0YCL2iMoIJrbXje48lvIQAQ4p2ZA== + +"@types/q@^0.0.32": + version "0.0.32" + resolved "https://registry.npmjs.org/@types/q/-/q-0.0.32.tgz" + integrity sha1-vShOV8hPEyXacCur/IKlMoGQwMU= + +"@types/q@^1.5.1": + version "1.5.5" + resolved "https://registry.npmjs.org/@types/q/-/q-1.5.5.tgz" + integrity sha512-L28j2FcJfSZOnL1WBjDYp2vUHCeIFlyYI/53EwD/rKUBQ7MtUUfbQWiyKJGpcnv4/WgrhWsFKrcPstcAt/J0tQ== + +"@types/selenium-webdriver@^3.0.0": + version "3.0.19" + resolved "https://registry.npmjs.org/@types/selenium-webdriver/-/selenium-webdriver-3.0.19.tgz" + integrity sha512-OFUilxQg+rWL2FMxtmIgCkUDlJB6pskkpvmew7yeXfzzsOBb5rc+y2+DjHm+r3r1ZPPcJefK3DveNSYWGiy68g== + +"@types/source-list-map@*": + version "0.1.2" + resolved "https://registry.npmjs.org/@types/source-list-map/-/source-list-map-0.1.2.tgz" + integrity sha512-K5K+yml8LTo9bWJI/rECfIPrGgxdpeNbj+d53lwN4QjW1MCwlkhUms+gtdzigTeUyBr09+u8BwOIY3MXvHdcsA== + +"@types/strip-bom@^3.0.0": + version "3.0.0" + resolved "https://registry.npmjs.org/@types/strip-bom/-/strip-bom-3.0.0.tgz" + integrity sha1-FKjsOVbC6B7bdSB5CuzyHCkK69I= + +"@types/strip-json-comments@0.0.30": + version "0.0.30" + resolved "https://registry.npmjs.org/@types/strip-json-comments/-/strip-json-comments-0.0.30.tgz" + integrity sha512-7NQmHra/JILCd1QqpSzl8+mJRc8ZHz3uDm8YV1Ks9IhK0epEiTw8aIErbvH9PI+6XbqhyIQy3462nEsn7UVzjQ== + +"@types/webpack-sources@^0.1.5": + version "0.1.9" + resolved "https://registry.npmjs.org/@types/webpack-sources/-/webpack-sources-0.1.9.tgz" + integrity sha512-bvzMnzqoK16PQIC8AYHNdW45eREJQMd6WG/msQWX5V2+vZmODCOPb4TJcbgRljTZZTwTM4wUMcsI8FftNA7new== + dependencies: + "@types/node" "*" + "@types/source-list-map" "*" + source-map "^0.6.1" + +"@webassemblyjs/ast@1.9.0": + version "1.9.0" + resolved "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.9.0.tgz" + integrity sha512-C6wW5L+b7ogSDVqymbkkvuW9kruN//YisMED04xzeBBqjHa2FYnmvOlS6Xj68xWQRgWvI9cIglsjFowH/RJyEA== + dependencies: + "@webassemblyjs/helper-module-context" "1.9.0" + "@webassemblyjs/helper-wasm-bytecode" "1.9.0" + "@webassemblyjs/wast-parser" "1.9.0" + +"@webassemblyjs/floating-point-hex-parser@1.9.0": + version "1.9.0" + resolved "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.9.0.tgz" + integrity sha512-TG5qcFsS8QB4g4MhrxK5TqfdNe7Ey/7YL/xN+36rRjl/BlGE/NcBvJcqsRgCP6Z92mRE+7N50pRIi8SmKUbcQA== + +"@webassemblyjs/helper-api-error@1.9.0": + version "1.9.0" + resolved "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.9.0.tgz" + integrity sha512-NcMLjoFMXpsASZFxJ5h2HZRcEhDkvnNFOAKneP5RbKRzaWJN36NC4jqQHKwStIhGXu5mUWlUUk7ygdtrO8lbmw== + +"@webassemblyjs/helper-buffer@1.9.0": + version "1.9.0" + resolved "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.9.0.tgz" + integrity sha512-qZol43oqhq6yBPx7YM3m9Bv7WMV9Eevj6kMi6InKOuZxhw+q9hOkvq5e/PpKSiLfyetpaBnogSbNCfBwyB00CA== + +"@webassemblyjs/helper-code-frame@1.9.0": + version "1.9.0" + resolved "https://registry.npmjs.org/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.9.0.tgz" + integrity sha512-ERCYdJBkD9Vu4vtjUYe8LZruWuNIToYq/ME22igL+2vj2dQ2OOujIZr3MEFvfEaqKoVqpsFKAGsRdBSBjrIvZA== + dependencies: + "@webassemblyjs/wast-printer" "1.9.0" + +"@webassemblyjs/helper-fsm@1.9.0": + version "1.9.0" + resolved "https://registry.npmjs.org/@webassemblyjs/helper-fsm/-/helper-fsm-1.9.0.tgz" + integrity sha512-OPRowhGbshCb5PxJ8LocpdX9Kl0uB4XsAjl6jH/dWKlk/mzsANvhwbiULsaiqT5GZGT9qinTICdj6PLuM5gslw== + +"@webassemblyjs/helper-module-context@1.9.0": + version "1.9.0" + resolved "https://registry.npmjs.org/@webassemblyjs/helper-module-context/-/helper-module-context-1.9.0.tgz" + integrity sha512-MJCW8iGC08tMk2enck1aPW+BE5Cw8/7ph/VGZxwyvGbJwjktKkDK7vy7gAmMDx88D7mhDTCNKAW5tED+gZ0W8g== + dependencies: + "@webassemblyjs/ast" "1.9.0" + +"@webassemblyjs/helper-wasm-bytecode@1.9.0": + version "1.9.0" + resolved "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.9.0.tgz" + integrity sha512-R7FStIzyNcd7xKxCZH5lE0Bqy+hGTwS3LJjuv1ZVxd9O7eHCedSdrId/hMOd20I+v8wDXEn+bjfKDLzTepoaUw== + +"@webassemblyjs/helper-wasm-section@1.9.0": + version "1.9.0" + resolved "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.9.0.tgz" + integrity sha512-XnMB8l3ek4tvrKUUku+IVaXNHz2YsJyOOmz+MMkZvh8h1uSJpSen6vYnw3IoQ7WwEuAhL8Efjms1ZWjqh2agvw== + dependencies: + "@webassemblyjs/ast" "1.9.0" + "@webassemblyjs/helper-buffer" "1.9.0" + "@webassemblyjs/helper-wasm-bytecode" "1.9.0" + "@webassemblyjs/wasm-gen" "1.9.0" + +"@webassemblyjs/ieee754@1.9.0": + version "1.9.0" + resolved "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.9.0.tgz" + integrity sha512-dcX8JuYU/gvymzIHc9DgxTzUUTLexWwt8uCTWP3otys596io0L5aW02Gb1RjYpx2+0Jus1h4ZFqjla7umFniTg== + dependencies: + "@xtuc/ieee754" "^1.2.0" + +"@webassemblyjs/leb128@1.9.0": + version "1.9.0" + resolved "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.9.0.tgz" + integrity sha512-ENVzM5VwV1ojs9jam6vPys97B/S65YQtv/aanqnU7D8aSoHFX8GyhGg0CMfyKNIHBuAVjy3tlzd5QMMINa7wpw== + dependencies: + "@xtuc/long" "4.2.2" + +"@webassemblyjs/utf8@1.9.0": + version "1.9.0" + resolved "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.9.0.tgz" + integrity sha512-GZbQlWtopBTP0u7cHrEx+73yZKrQoBMpwkGEIqlacljhXCkVM1kMQge/Mf+csMJAjEdSwhOyLAS0AoR3AG5P8w== + +"@webassemblyjs/wasm-edit@1.9.0": + version "1.9.0" + resolved "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.9.0.tgz" + integrity sha512-FgHzBm80uwz5M8WKnMTn6j/sVbqilPdQXTWraSjBwFXSYGirpkSWE2R9Qvz9tNiTKQvoKILpCuTjBKzOIm0nxw== + dependencies: + "@webassemblyjs/ast" "1.9.0" + "@webassemblyjs/helper-buffer" "1.9.0" + "@webassemblyjs/helper-wasm-bytecode" "1.9.0" + "@webassemblyjs/helper-wasm-section" "1.9.0" + "@webassemblyjs/wasm-gen" "1.9.0" + "@webassemblyjs/wasm-opt" "1.9.0" + "@webassemblyjs/wasm-parser" "1.9.0" + "@webassemblyjs/wast-printer" "1.9.0" + +"@webassemblyjs/wasm-gen@1.9.0": + version "1.9.0" + resolved "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.9.0.tgz" + integrity sha512-cPE3o44YzOOHvlsb4+E9qSqjc9Qf9Na1OO/BHFy4OI91XDE14MjFN4lTMezzaIWdPqHnsTodGGNP+iRSYfGkjA== + dependencies: + "@webassemblyjs/ast" "1.9.0" + "@webassemblyjs/helper-wasm-bytecode" "1.9.0" + "@webassemblyjs/ieee754" "1.9.0" + "@webassemblyjs/leb128" "1.9.0" + "@webassemblyjs/utf8" "1.9.0" + +"@webassemblyjs/wasm-opt@1.9.0": + version "1.9.0" + resolved "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.9.0.tgz" + integrity sha512-Qkjgm6Anhm+OMbIL0iokO7meajkzQD71ioelnfPEj6r4eOFuqm4YC3VBPqXjFyyNwowzbMD+hizmprP/Fwkl2A== + dependencies: + "@webassemblyjs/ast" "1.9.0" + "@webassemblyjs/helper-buffer" "1.9.0" + "@webassemblyjs/wasm-gen" "1.9.0" + "@webassemblyjs/wasm-parser" "1.9.0" + +"@webassemblyjs/wasm-parser@1.9.0": + version "1.9.0" + resolved "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.9.0.tgz" + integrity sha512-9+wkMowR2AmdSWQzsPEjFU7njh8HTO5MqO8vjwEHuM+AMHioNqSBONRdr0NQQ3dVQrzp0s8lTcYqzUdb7YgELA== + dependencies: + "@webassemblyjs/ast" "1.9.0" + "@webassemblyjs/helper-api-error" "1.9.0" + "@webassemblyjs/helper-wasm-bytecode" "1.9.0" + "@webassemblyjs/ieee754" "1.9.0" + "@webassemblyjs/leb128" "1.9.0" + "@webassemblyjs/utf8" "1.9.0" + +"@webassemblyjs/wast-parser@1.9.0": + version "1.9.0" + resolved "https://registry.npmjs.org/@webassemblyjs/wast-parser/-/wast-parser-1.9.0.tgz" + integrity sha512-qsqSAP3QQ3LyZjNC/0jBJ/ToSxfYJ8kYyuiGvtn/8MK89VrNEfwj7BPQzJVHi0jGTRK2dGdJ5PRqhtjzoww+bw== + dependencies: + "@webassemblyjs/ast" "1.9.0" + "@webassemblyjs/floating-point-hex-parser" "1.9.0" + "@webassemblyjs/helper-api-error" "1.9.0" + "@webassemblyjs/helper-code-frame" "1.9.0" + "@webassemblyjs/helper-fsm" "1.9.0" + "@xtuc/long" "4.2.2" + +"@webassemblyjs/wast-printer@1.9.0": + version "1.9.0" + resolved "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.9.0.tgz" + integrity sha512-2J0nE95rHXHyQ24cWjMKJ1tqB/ds8z/cyeOZxJhcb+rW+SQASVjuznUSmdz5GpVJTzU8JkhYut0D3siFDD6wsA== + dependencies: + "@webassemblyjs/ast" "1.9.0" + "@webassemblyjs/wast-parser" "1.9.0" + "@xtuc/long" "4.2.2" + +"@xtuc/ieee754@^1.2.0": + version "1.2.0" + resolved "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz" + integrity sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA== + +"@xtuc/long@4.2.2": + version "4.2.2" + resolved "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz" + integrity sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ== + +"@yarnpkg/lockfile@1.1.0": + version "1.1.0" + resolved "https://registry.npmjs.org/@yarnpkg/lockfile/-/lockfile-1.1.0.tgz" + integrity sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ== + +"@zxing/browser@0.0.10": + version "0.0.10" + resolved "https://registry.npmjs.org/@zxing/browser/-/browser-0.0.10.tgz" + integrity sha512-P2wQc5fs+cjSc39zFS4UDhejWqdikf4FjuWIlFrzXD8fOsZ4ASfmLDKGeg7mRgmJq11oMKcVXvFFI6kcIKtxuQ== + optionalDependencies: + "@zxing/text-encoding" "^0.9.0" + +"@zxing/library@^0.18.6": + version "0.18.6" + resolved "https://registry.npmjs.org/@zxing/library/-/library-0.18.6.tgz" + integrity sha512-bulZ9JHoLFd9W36pi+7e7DnEYNJhljYjZ1UTsKPOoLMU3qtC+REHITeCRNx40zTRJZx18W5TBRXt5pq2Uopjsw== + dependencies: + ts-custom-error "^3.0.0" + optionalDependencies: + "@zxing/text-encoding" "~0.9.0" + +"@zxing/text-encoding@^0.9.0", "@zxing/text-encoding@~0.9.0": + version "0.9.0" + resolved "https://registry.npmjs.org/@zxing/text-encoding/-/text-encoding-0.9.0.tgz" + integrity sha512-U/4aVJ2mxI0aDNI8Uq0wEhMgY+u4CNtEb0om3+y3+niDAsoTCOB33UF0sxpzqzdqXLqmvc+vZyAt4O8pPdfkwA== + +JSONStream@^1.3.4: + version "1.3.5" + resolved "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.5.tgz" + integrity sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ== + dependencies: + jsonparse "^1.2.0" + through ">=2.2.7 <3" + +abab@^2.0.3: + version "2.0.5" + resolved "https://registry.npmjs.org/abab/-/abab-2.0.5.tgz" + integrity sha512-9IK9EadsbHo6jLWIpxpR6pL0sazTXV6+SQv25ZB+F7Bj9mJNaOc4nCRabwd5M/JwmUa8idz6Eci6eKfJryPs6Q== + +accepts@~1.3.4, accepts@~1.3.5, accepts@~1.3.7: + version "1.3.7" + resolved "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz" + integrity sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA== + dependencies: + mime-types "~2.1.24" + negotiator "0.6.2" + +acorn@^6.4.1: + version "6.4.2" + resolved "https://registry.npmjs.org/acorn/-/acorn-6.4.2.tgz" + integrity sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ== + +adjust-sourcemap-loader@2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/adjust-sourcemap-loader/-/adjust-sourcemap-loader-2.0.0.tgz" + integrity sha512-4hFsTsn58+YjrU9qKzML2JSSDqKvN8mUGQ0nNIrfPi8hmIONT4L3uUaT6MKdMsZ9AjsU6D2xDkZxCkbQPxChrA== + dependencies: + assert "1.4.1" + camelcase "5.0.0" + loader-utils "1.2.3" + object-path "0.11.4" + regex-parser "2.2.10" + +adm-zip@^0.4.9: + version "0.4.16" + resolved "https://registry.npmjs.org/adm-zip/-/adm-zip-0.4.16.tgz" + integrity sha512-TFi4HBKSGfIKsK5YCkKaaFG2m4PEDyViZmEwof3MTIgzimHLto6muaHVpbrljdIvIrFZzEq/p4nafOeLcYegrg== + +after@0.8.2: + version "0.8.2" + resolved "https://registry.npmjs.org/after/-/after-0.8.2.tgz" + integrity sha1-/ts5T58OAqqXaOcCvaI7UF+ufh8= + +agent-base@4, agent-base@^4.3.0: + version "4.3.0" + resolved "https://registry.npmjs.org/agent-base/-/agent-base-4.3.0.tgz" + integrity sha512-salcGninV0nPrwpGNn4VTXBb1SOuXQBiqbrNXoeizJsHrsL6ERFM2Ne3JUSBWRE6aeNJI2ROP/WEEIDUiDe3cg== + dependencies: + es6-promisify "^5.0.0" + +agent-base@~4.2.1: + version "4.2.1" + resolved "https://registry.npmjs.org/agent-base/-/agent-base-4.2.1.tgz" + integrity sha512-JVwXMr9nHYTUXsBFKUqhJwvlcYU/blreOEUkhNR2eXZIvwd+c+o5V4MgDPKWnMS/56awN3TRzIP+KoPn+roQtg== + dependencies: + es6-promisify "^5.0.0" + +agentkeepalive@^3.4.1: + version "3.5.2" + resolved "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-3.5.2.tgz" + integrity sha512-e0L/HNe6qkQ7H19kTlRRqUibEAwDK5AFk6y3PtMsuut2VAH6+Q4xZml1tNDJD7kSAyqmbG/K08K5WEJYtUrSlQ== + dependencies: + humanize-ms "^1.2.1" + +aggregate-error@^3.0.0: + version "3.1.0" + resolved "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz" + integrity sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA== + dependencies: + clean-stack "^2.0.0" + indent-string "^4.0.0" + +ajv-errors@^1.0.0: + version "1.0.1" + resolved "https://registry.npmjs.org/ajv-errors/-/ajv-errors-1.0.1.tgz" + integrity sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ== + +ajv-formats@2.1.1: + version "2.1.1" + resolved "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz" + integrity sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA== + dependencies: + ajv "^8.0.0" + +ajv-keywords@^3.1.0, ajv-keywords@^3.4.1, ajv-keywords@^3.5.2: + version "3.5.2" + resolved "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz" + integrity sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ== + +ajv@6.12.3: + version "6.12.3" + resolved "https://registry.npmjs.org/ajv/-/ajv-6.12.3.tgz" + integrity sha512-4K0cK3L1hsqk9xIb2z9vs/XU+PGJZ9PNpJRDS9YLzmNdX6jmVPfamLvTJr0aDAusnHyCHO6MjzlkAsgtqp9teA== + dependencies: + fast-deep-equal "^3.1.1" + fast-json-stable-stringify "^2.0.0" + json-schema-traverse "^0.4.1" + uri-js "^4.2.2" + +ajv@6.12.4: + version "6.12.4" + resolved "https://registry.npmjs.org/ajv/-/ajv-6.12.4.tgz" + integrity sha512-eienB2c9qVQs2KWexhkrdMLVDoIQCz5KSeLxwg9Lzk4DOfBtIK9PQwwufcsn1jjGuf9WZmqPMbGxOzfcuphJCQ== + dependencies: + fast-deep-equal "^3.1.1" + fast-json-stable-stringify "^2.0.0" + json-schema-traverse "^0.4.1" + uri-js "^4.2.2" + +ajv@8.6.3: + version "8.6.3" + resolved "https://registry.npmjs.org/ajv/-/ajv-8.6.3.tgz" + integrity sha512-SMJOdDP6LqTkD0Uq8qLi+gMwSt0imXLSV080qFVwJCpH9U6Mb+SUGHAXM0KNbcBPguytWyvFxcHgMLe2D2XSpw== + dependencies: + fast-deep-equal "^3.1.1" + json-schema-traverse "^1.0.0" + require-from-string "^2.0.2" + uri-js "^4.2.2" + +ajv@^6.1.0, ajv@^6.10.0, ajv@^6.10.2, ajv@^6.12.3, ajv@^6.12.4, ajv@^6.12.5: + version "6.12.6" + resolved "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz" + integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== + dependencies: + fast-deep-equal "^3.1.1" + fast-json-stable-stringify "^2.0.0" + json-schema-traverse "^0.4.1" + uri-js "^4.2.2" + +ajv@^8.0.0: + version "8.8.2" + resolved "https://registry.npmjs.org/ajv/-/ajv-8.8.2.tgz" + integrity sha512-x9VuX+R/jcFj1DHo/fCp99esgGDWiHENrKxaCENuCxpoMCmAt/COCGVDwA7kleEpEzJjDnvh3yGoOuLu0Dtllw== + dependencies: + fast-deep-equal "^3.1.1" + json-schema-traverse "^1.0.0" + require-from-string "^2.0.2" + uri-js "^4.2.2" + +alphanum-sort@^1.0.0: + version "1.0.2" + resolved "https://registry.npmjs.org/alphanum-sort/-/alphanum-sort-1.0.2.tgz" + integrity sha1-l6ERlkmyEa0zaR2fn0hqjsn74KM= + +angular-ng-autocomplete@^2.0.5: + version "2.0.5" + resolved "https://registry.npmjs.org/angular-ng-autocomplete/-/angular-ng-autocomplete-2.0.5.tgz" + integrity sha512-mYALrzwc5eoFR5xz/diup5GDsxqXp3L707P4CkiBl5l01fKej0nyIDTQ+xXtZUK3spXIyfuOX0ypa9wTrgCP5A== + +angular2-multiselect-dropdown@^5.0.4: + version "5.0.4" + resolved "https://registry.npmjs.org/angular2-multiselect-dropdown/-/angular2-multiselect-dropdown-5.0.4.tgz" + integrity sha512-HpxgFIoAaNzJwdeWq3mjw0V/K9CBaan7pdlIbQ+CuHy29qfDWvPGj23veTcFvzuDA1qbllTQiI1px4O+zKfQUw== + dependencies: + "@tweenjs/tween.js" "^17.4.0" + tslib "^2.0.0" + +angular6-json-schema-form@^8.0.0: + version "8.0.0" + resolved "https://registry.npmjs.org/angular6-json-schema-form/-/angular6-json-schema-form-8.0.0.tgz" + integrity sha512-L9KaUXmpeUeNRzaS3M1co6JyHqtu+htSTLy/VJXAK/dZMFHlktqxo/0w+yMnG49I5/m/7mUDnvRXQNIJct1o2Q== + dependencies: + tslib "^1.9.0" + +ansi-colors@3.2.3: + version "3.2.3" + resolved "https://registry.npmjs.org/ansi-colors/-/ansi-colors-3.2.3.tgz" + integrity sha512-LEHHyuhlPY3TmuUYMh2oz89lTShfvgbmzaBcxve9t/9Wuy7Dwf4yoAKcND7KFT1HAQfqZ12qtc+DUrBMeKF9nw== + +ansi-colors@4.1.1: + version "4.1.1" + resolved "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz" + integrity sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA== + +ansi-colors@^3.0.0: + version "3.2.4" + resolved "https://registry.npmjs.org/ansi-colors/-/ansi-colors-3.2.4.tgz" + integrity sha512-hHUXGagefjN2iRrID63xckIvotOXOojhQKWIPUZ4mNUZ9nLZW+7FMNoE1lOkEhNWYsx/7ysGIuJYCiMAA9FnrA== + +ansi-escapes@^4.2.1: + version "4.3.2" + resolved "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz" + integrity sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ== + dependencies: + type-fest "^0.21.3" + +ansi-html@0.0.7: + version "0.0.7" + resolved "https://registry.npmjs.org/ansi-html/-/ansi-html-0.0.7.tgz" + integrity sha1-gTWEAhliqenm/QOflA0S9WynhZ4= + +ansi-regex@^2.0.0: + version "2.1.1" + resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz" + integrity sha1-w7M6te42DYbg5ijwRorn7yfWVN8= + +ansi-regex@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz" + integrity sha1-7QMXwyIGT3lGbAKWa922Bas32Zg= + +ansi-regex@^4.1.0: + version "4.1.0" + resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz" + integrity sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg== + +ansi-regex@^5.0.1: + version "5.0.1" + resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz" + integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== + +ansi-styles@^2.2.1: + version "2.2.1" + resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz" + integrity sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4= + +ansi-styles@^3.2.0, ansi-styles@^3.2.1: + version "3.2.1" + resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz" + integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== + dependencies: + color-convert "^1.9.0" + +ansi-styles@^4.0.0, ansi-styles@^4.1.0: + version "4.3.0" + resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz" + integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== + dependencies: + color-convert "^2.0.1" + +anymatch@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz" + integrity sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw== + dependencies: + micromatch "^3.1.4" + normalize-path "^2.1.1" + +anymatch@~3.1.1, anymatch@~3.1.2: + version "3.1.2" + resolved "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz" + integrity sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg== + dependencies: + normalize-path "^3.0.0" + picomatch "^2.0.4" + +app-root-path@^2.2.1: + version "2.2.1" + resolved "https://registry.npmjs.org/app-root-path/-/app-root-path-2.2.1.tgz" + integrity sha512-91IFKeKk7FjfmezPKkwtaRvSpnUc4gDwPAjA1YZ9Gn0q0PPeW+vbeUsZuyDwjI7+QTHhcLen2v25fi/AmhvbJA== + +aproba@^1.1.1: + version "1.2.0" + resolved "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz" + integrity sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw== + +argparse@^1.0.7: + version "1.0.10" + resolved "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz" + integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== + dependencies: + sprintf-js "~1.0.2" + +aria-query@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/aria-query/-/aria-query-3.0.0.tgz" + integrity sha1-ZbP8wcoRVajJrmTW7uKX8V1RM8w= + dependencies: + ast-types-flow "0.0.7" + commander "^2.11.0" + +arity-n@^1.0.4: + version "1.0.4" + resolved "https://registry.npmjs.org/arity-n/-/arity-n-1.0.4.tgz" + integrity sha1-2edrEXM+CFacCEeuezmyhgswt0U= + +arr-diff@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz" + integrity sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA= + +arr-flatten@^1.1.0: + version "1.1.0" + resolved "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz" + integrity sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg== + +arr-union@^3.1.0: + version "3.1.0" + resolved "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz" + integrity sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ= + +array-flatten@1.1.1: + version "1.1.1" + resolved "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz" + integrity sha1-ml9pkFGx5wczKPKgCJaLZOopVdI= + +array-flatten@^2.1.0: + version "2.1.2" + resolved "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.2.tgz" + integrity sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ== + +array-union@^1.0.1: + version "1.0.2" + resolved "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz" + integrity sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk= + dependencies: + array-uniq "^1.0.1" + +array-union@^2.1.0: + version "2.1.0" + resolved "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz" + integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== + +array-uniq@^1.0.1: + version "1.0.3" + resolved "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz" + integrity sha1-r2rId6Jcx/dOBYiUdThY39sk/bY= + +array-unique@^0.3.2: + version "0.3.2" + resolved "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz" + integrity sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg= + +arraybuffer.slice@~0.0.7: + version "0.0.7" + resolved "https://registry.npmjs.org/arraybuffer.slice/-/arraybuffer.slice-0.0.7.tgz" + integrity sha512-wGUIVQXuehL5TCqQun8OW81jGzAWycqzFF8lFp+GOM5BXLYj3bKNsYC4daB7n6XjCqxQA/qgTJ+8ANR3acjrog== + +arrify@^1.0.0: + version "1.0.1" + resolved "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz" + integrity sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0= + +asap@^2.0.0: + version "2.0.6" + resolved "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz" + integrity sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY= + +asn1.js@^5.2.0: + version "5.4.1" + resolved "https://registry.npmjs.org/asn1.js/-/asn1.js-5.4.1.tgz" + integrity sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA== + dependencies: + bn.js "^4.0.0" + inherits "^2.0.1" + minimalistic-assert "^1.0.0" + safer-buffer "^2.1.0" + +asn1@~0.2.3: + version "0.2.6" + resolved "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz" + integrity sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ== + dependencies: + safer-buffer "~2.1.0" + +assert-plus@1.0.0, assert-plus@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz" + integrity sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU= + +assert@1.4.1, assert@^1.1.1: + version "1.4.1" + resolved "https://registry.npmjs.org/assert/-/assert-1.4.1.tgz" + integrity sha1-mZEtWRg2tab1s0XA8H7vwI/GXZE= + dependencies: + util "0.10.3" + +assign-symbols@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz" + integrity sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c= + +ast-types-flow@0.0.7: + version "0.0.7" + resolved "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.7.tgz" + integrity sha1-9wtzXGvKGlycItmCw+Oef+ujva0= + +async-each@^1.0.1: + version "1.0.3" + resolved "https://registry.npmjs.org/async-each/-/async-each-1.0.3.tgz" + integrity sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ== + +async-limiter@~1.0.0: + version "1.0.1" + resolved "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz" + integrity sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ== + +async@^2.6.2: + version "2.6.3" + resolved "https://registry.npmjs.org/async/-/async-2.6.3.tgz" + integrity sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg== + dependencies: + lodash "^4.17.14" + +asynckit@^0.4.0: + version "0.4.0" + resolved "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz" + integrity sha1-x57Zf380y48robyXkLzDZkdLS3k= + +atob@^2.1.2: + version "2.1.2" + resolved "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz" + integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg== + +autoprefixer@9.8.0: + version "9.8.0" + resolved "https://registry.npmjs.org/autoprefixer/-/autoprefixer-9.8.0.tgz" + integrity sha512-D96ZiIHXbDmU02dBaemyAg53ez+6F5yZmapmgKcjm35yEe1uVDYI8hGW3VYoGRaG290ZFf91YxHrR518vC0u/A== + dependencies: + browserslist "^4.12.0" + caniuse-lite "^1.0.30001061" + chalk "^2.4.2" + normalize-range "^0.1.2" + num2fraction "^1.2.2" + postcss "^7.0.30" + postcss-value-parser "^4.1.0" + +aws-sign2@~0.7.0: + version "0.7.0" + resolved "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz" + integrity sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg= + +aws4@^1.8.0: + version "1.11.0" + resolved "https://registry.npmjs.org/aws4/-/aws4-1.11.0.tgz" + integrity sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA== + +axobject-query@2.0.2: + version "2.0.2" + resolved "https://registry.npmjs.org/axobject-query/-/axobject-query-2.0.2.tgz" + integrity sha512-MCeek8ZH7hKyO1rWUbKNQBbl4l2eY0ntk7OGi+q0RlafrCnfPxC06WZA+uebCfmYp4mNU9jRBP1AhGyf8+W3ww== + dependencies: + ast-types-flow "0.0.7" + +babel-loader@8.1.0: + version "8.1.0" + resolved "https://registry.npmjs.org/babel-loader/-/babel-loader-8.1.0.tgz" + integrity sha512-7q7nC1tYOrqvUrN3LQK4GwSk/TQorZSOlO9C+RZDZpODgyN4ZlCqE5q9cDsyWOliN+aU9B4JX01xK9eJXowJLw== + dependencies: + find-cache-dir "^2.1.0" + loader-utils "^1.4.0" + mkdirp "^0.5.3" + pify "^4.0.1" + schema-utils "^2.6.5" + +babel-plugin-dynamic-import-node@^2.3.3: + version "2.3.3" + resolved "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz" + integrity sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ== + dependencies: + object.assign "^4.1.0" + +backo2@1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/backo2/-/backo2-1.0.2.tgz" + integrity sha1-MasayLEpNjRj41s+u2n038+6eUc= + +balanced-match@^1.0.0: + version "1.0.2" + resolved "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz" + integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== + +base64-arraybuffer@0.1.4: + version "0.1.4" + resolved "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-0.1.4.tgz" + integrity sha1-mBjHngWbE1X5fgQooBfIOOkLqBI= + +base64-js@1.3.1: + version "1.3.1" + resolved "https://registry.npmjs.org/base64-js/-/base64-js-1.3.1.tgz" + integrity sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g== + +base64-js@^1.0.2, base64-js@^1.3.1: + version "1.5.1" + resolved "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz" + integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== + +base64id@2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/base64id/-/base64id-2.0.0.tgz" + integrity sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog== + +base@^0.11.1: + version "0.11.2" + resolved "https://registry.npmjs.org/base/-/base-0.11.2.tgz" + integrity sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg== + dependencies: + cache-base "^1.0.1" + class-utils "^0.3.5" + component-emitter "^1.2.1" + define-property "^1.0.0" + isobject "^3.0.1" + mixin-deep "^1.2.0" + pascalcase "^0.1.1" + +batch@0.6.1: + version "0.6.1" + resolved "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz" + integrity sha1-3DQxT05nkxgJP8dgJyUl+UvyXBY= + +bcrypt-pbkdf@^1.0.0: + version "1.0.2" + resolved "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz" + integrity sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4= + dependencies: + tweetnacl "^0.14.3" + +big.js@^5.2.2: + version "5.2.2" + resolved "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz" + integrity sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ== + +binary-extensions@^1.0.0: + version "1.13.1" + resolved "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz" + integrity sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw== + +binary-extensions@^2.0.0: + version "2.2.0" + resolved "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz" + integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== + +bindings@^1.5.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/bindings/-/bindings-1.5.0.tgz#10353c9e945334bc0511a6d90b38fbc7c9c504df" + integrity sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ== + dependencies: + file-uri-to-path "1.0.0" + +bl@^4.1.0: + version "4.1.0" + resolved "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz" + integrity sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w== + dependencies: + buffer "^5.5.0" + inherits "^2.0.4" + readable-stream "^3.4.0" + +blob@0.0.5: + version "0.0.5" + resolved "https://registry.npmjs.org/blob/-/blob-0.0.5.tgz" + integrity sha512-gaqbzQPqOoamawKg0LGVd7SzLgXS+JH61oWprSLH+P+abTczqJbhTR8CmJ2u9/bUYNmHTGJx/UEmn6doAvvuig== + +blocking-proxy@^1.0.0: + version "1.0.1" + resolved "https://registry.npmjs.org/blocking-proxy/-/blocking-proxy-1.0.1.tgz" + integrity sha512-KE8NFMZr3mN2E0HcvCgRtX7DjhiIQrwle+nSVJVC/yqFb9+xznHl2ZcoBp2L9qzkI4t4cBFJ1efXF8Dwi132RA== + dependencies: + minimist "^1.2.0" + +bluebird@^3.5.1, bluebird@^3.5.3, bluebird@^3.5.5: + version "3.7.2" + resolved "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz" + integrity sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg== + +bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.11.9: + version "4.12.0" + resolved "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz" + integrity sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA== + +bn.js@^5.0.0, bn.js@^5.1.1: + version "5.2.0" + resolved "https://registry.npmjs.org/bn.js/-/bn.js-5.2.0.tgz" + integrity sha512-D7iWRBvnZE8ecXiLj/9wbxH7Tk79fAh8IHaTNq1RWRixsS02W+5qS+iE9yq6RYl0asXx5tw0bLhmT5pIfbSquw== + +body-parser@1.19.0, body-parser@^1.19.0: + version "1.19.0" + resolved "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz" + integrity sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw== + dependencies: + bytes "3.1.0" + content-type "~1.0.4" + debug "2.6.9" + depd "~1.1.2" + http-errors "1.7.2" + iconv-lite "0.4.24" + on-finished "~2.3.0" + qs "6.7.0" + raw-body "2.4.0" + type-is "~1.6.17" + +bonjour@^3.5.0: + version "3.5.0" + resolved "https://registry.npmjs.org/bonjour/-/bonjour-3.5.0.tgz" + integrity sha1-jokKGD2O6aI5OzhExpGkK897yfU= + dependencies: + array-flatten "^2.1.0" + deep-equal "^1.0.1" + dns-equal "^1.0.0" + dns-txt "^2.0.2" + multicast-dns "^6.0.1" + multicast-dns-service-types "^1.1.0" + +boolbase@^1.0.0, boolbase@~1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz" + integrity sha1-aN/1++YMUes3cl6p4+0xDcwed24= + +bootstrap@^4.5.0: + version "4.6.1" + resolved "https://registry.npmjs.org/bootstrap/-/bootstrap-4.6.1.tgz" + integrity sha512-0dj+VgI9Ecom+rvvpNZ4MUZJz8dcX7WCX+eTID9+/8HgOkv3dsRzi8BGeZJCQU6flWQVYxwTQnEZFrmJSEO7og== + +bowser@^1.7.2: + version "1.9.4" + resolved "https://registry.npmjs.org/bowser/-/bowser-1.9.4.tgz" + integrity sha512-9IdMmj2KjigRq6oWhmwv1W36pDuA4STQZ8q6YO9um+x07xgYNCD3Oou+WP/3L1HNz7iqythGet3/p4wvc8AAwQ== + +brace-expansion@^1.1.7: + version "1.1.11" + resolved "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz" + integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== + dependencies: + balanced-match "^1.0.0" + concat-map "0.0.1" + +braces@^2.3.1, braces@^2.3.2: + version "2.3.2" + resolved "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz" + integrity sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w== + dependencies: + arr-flatten "^1.1.0" + array-unique "^0.3.2" + extend-shallow "^2.0.1" + fill-range "^4.0.0" + isobject "^3.0.1" + repeat-element "^1.1.2" + snapdragon "^0.8.1" + snapdragon-node "^2.0.1" + split-string "^3.0.2" + to-regex "^3.0.1" + +braces@^3.0.1, braces@^3.0.2, braces@~3.0.2: + version "3.0.2" + resolved "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz" + integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== + dependencies: + fill-range "^7.0.1" + +brorand@^1.0.1, brorand@^1.1.0: + version "1.1.0" + resolved "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz" + integrity sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8= + +browser-stdout@1.3.1: + version "1.3.1" + resolved "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz" + integrity sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw== + +browserify-aes@^1.0.0, browserify-aes@^1.0.4: + version "1.2.0" + resolved "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz" + integrity sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA== + dependencies: + buffer-xor "^1.0.3" + cipher-base "^1.0.0" + create-hash "^1.1.0" + evp_bytestokey "^1.0.3" + inherits "^2.0.1" + safe-buffer "^5.0.1" + +browserify-cipher@^1.0.0: + version "1.0.1" + resolved "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz" + integrity sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w== + dependencies: + browserify-aes "^1.0.4" + browserify-des "^1.0.0" + evp_bytestokey "^1.0.0" + +browserify-des@^1.0.0: + version "1.0.2" + resolved "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz" + integrity sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A== + dependencies: + cipher-base "^1.0.1" + des.js "^1.0.0" + inherits "^2.0.1" + safe-buffer "^5.1.2" + +browserify-rsa@^4.0.0, browserify-rsa@^4.0.1: + version "4.1.0" + resolved "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.1.0.tgz" + integrity sha512-AdEER0Hkspgno2aR97SAf6vi0y0k8NuOpGnVH3O99rcA5Q6sh8QxcngtHuJ6uXwnfAXNM4Gn1Gb7/MV1+Ymbog== + dependencies: + bn.js "^5.0.0" + randombytes "^2.0.1" + +browserify-sign@^4.0.0: + version "4.2.1" + resolved "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.2.1.tgz" + integrity sha512-/vrA5fguVAKKAVTNJjgSm1tRQDHUU6DbwO9IROu/0WAzC8PKhucDSh18J0RMvVeHAn5puMd+QHC2erPRNf8lmg== + dependencies: + bn.js "^5.1.1" + browserify-rsa "^4.0.1" + create-hash "^1.2.0" + create-hmac "^1.1.7" + elliptic "^6.5.3" + inherits "^2.0.4" + parse-asn1 "^5.1.5" + readable-stream "^3.6.0" + safe-buffer "^5.2.0" + +browserify-zlib@^0.2.0: + version "0.2.0" + resolved "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz" + integrity sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA== + dependencies: + pako "~1.0.5" + +browserslist@^4.0.0, browserslist@^4.11.1, browserslist@^4.12.0, browserslist@^4.17.5, browserslist@^4.18.1, browserslist@^4.9.1: + version "4.18.1" + resolved "https://registry.npmjs.org/browserslist/-/browserslist-4.18.1.tgz" + integrity sha512-8ScCzdpPwR2wQh8IT82CA2VgDwjHyqMovPBZSNH54+tm4Jk2pCuv90gmAdH6J84OCRWi0b4gMe6O6XPXuJnjgQ== + dependencies: + caniuse-lite "^1.0.30001280" + electron-to-chromium "^1.3.896" + escalade "^3.1.1" + node-releases "^2.0.1" + picocolors "^1.0.0" + +browserstack@^1.5.1: + version "1.6.1" + resolved "https://registry.npmjs.org/browserstack/-/browserstack-1.6.1.tgz" + integrity sha512-GxtFjpIaKdbAyzHfFDKixKO8IBT7wR3NjbzrGc78nNs/Ciys9wU3/nBtsqsWv5nDSrdI5tz0peKuzCPuNXNUiw== + dependencies: + https-proxy-agent "^2.2.1" + +buffer-from@^1.0.0: + version "1.1.2" + resolved "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz" + integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== + +buffer-indexof@^1.0.0: + version "1.1.1" + resolved "https://registry.npmjs.org/buffer-indexof/-/buffer-indexof-1.1.1.tgz" + integrity sha512-4/rOEg86jivtPTeOUUT61jJO1Ya1TrR/OkqCSZDyq84WJh3LuuiphBYJN+fm5xufIk4XAFcEwte/8WzC8If/1g== + +buffer-xor@^1.0.3: + version "1.0.3" + resolved "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz" + integrity sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk= + +buffer@^4.3.0: + version "4.9.2" + resolved "https://registry.npmjs.org/buffer/-/buffer-4.9.2.tgz" + integrity sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg== + dependencies: + base64-js "^1.0.2" + ieee754 "^1.1.4" + isarray "^1.0.0" + +buffer@^5.5.0: + version "5.7.1" + resolved "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz" + integrity sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ== + dependencies: + base64-js "^1.3.1" + ieee754 "^1.1.13" + +builtin-modules@^1.1.1: + version "1.1.1" + resolved "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz" + integrity sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8= + +builtin-status-codes@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz" + integrity sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug= + +builtins@^1.0.3: + version "1.0.3" + resolved "https://registry.npmjs.org/builtins/-/builtins-1.0.3.tgz" + integrity sha1-y5T662HIaWRR2zZTThQi+U8K7og= + +bytes@3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz" + integrity sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg= + +bytes@3.1.0: + version "3.1.0" + resolved "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz" + integrity sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg== + +cacache@15.0.3: + version "15.0.3" + resolved "https://registry.npmjs.org/cacache/-/cacache-15.0.3.tgz" + integrity sha512-bc3jKYjqv7k4pWh7I/ixIjfcjPul4V4jme/WbjvwGS5LzoPL/GzXr4C5EgPNLO/QEZl9Oi61iGitYEdwcrwLCQ== + dependencies: + chownr "^2.0.0" + fs-minipass "^2.0.0" + glob "^7.1.4" + infer-owner "^1.0.4" + lru-cache "^5.1.1" + minipass "^3.1.1" + minipass-collect "^1.0.2" + minipass-flush "^1.0.5" + minipass-pipeline "^1.2.2" + mkdirp "^1.0.3" + move-file "^2.0.0" + p-map "^4.0.0" + promise-inflight "^1.0.1" + rimraf "^3.0.2" + ssri "^8.0.0" + tar "^6.0.2" + unique-filename "^1.1.1" + +cacache@^12.0.0, cacache@^12.0.2: + version "12.0.4" + resolved "https://registry.npmjs.org/cacache/-/cacache-12.0.4.tgz" + integrity sha512-a0tMB40oefvuInr4Cwb3GerbL9xTj1D5yg0T5xrjGCGyfvbxseIXX7BAO/u/hIXdafzOI5JC3wDwHyf24buOAQ== + dependencies: + bluebird "^3.5.5" + chownr "^1.1.1" + figgy-pudding "^3.5.1" + glob "^7.1.4" + graceful-fs "^4.1.15" + infer-owner "^1.0.3" + lru-cache "^5.1.1" + mississippi "^3.0.0" + mkdirp "^0.5.1" + move-concurrently "^1.0.1" + promise-inflight "^1.0.1" + rimraf "^2.6.3" + ssri "^6.0.1" + unique-filename "^1.1.1" + y18n "^4.0.0" + +cacache@^15.0.3, cacache@^15.0.4: + version "15.3.0" + resolved "https://registry.npmjs.org/cacache/-/cacache-15.3.0.tgz" + integrity sha512-VVdYzXEn+cnbXpFgWs5hTT7OScegHVmLhJIR8Ufqk3iFD6A6j5iSX1KuBTfNEv4tdJWE2PzA6IVFtcLC7fN9wQ== + dependencies: + "@npmcli/fs" "^1.0.0" + "@npmcli/move-file" "^1.0.1" + chownr "^2.0.0" + fs-minipass "^2.0.0" + glob "^7.1.4" + infer-owner "^1.0.4" + lru-cache "^6.0.0" + minipass "^3.1.1" + minipass-collect "^1.0.2" + minipass-flush "^1.0.5" + minipass-pipeline "^1.2.2" + mkdirp "^1.0.3" + p-map "^4.0.0" + promise-inflight "^1.0.1" + rimraf "^3.0.2" + ssri "^8.0.1" + tar "^6.0.2" + unique-filename "^1.1.1" + +cache-base@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz" + integrity sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ== + dependencies: + collection-visit "^1.0.0" + component-emitter "^1.2.1" + get-value "^2.0.6" + has-value "^1.0.0" + isobject "^3.0.1" + set-value "^2.0.0" + to-object-path "^0.3.0" + union-value "^1.0.0" + unset-value "^1.0.0" + +call-bind@^1.0.0, call-bind@^1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz" + integrity sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA== + dependencies: + function-bind "^1.1.1" + get-intrinsic "^1.0.2" + +call-me-maybe@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/call-me-maybe/-/call-me-maybe-1.0.1.tgz" + integrity sha1-JtII6onje1y95gJQoV8DHBak1ms= + +caller-callsite@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/caller-callsite/-/caller-callsite-2.0.0.tgz" + integrity sha1-hH4PzgoiN1CpoCfFSzNzGtMVQTQ= + dependencies: + callsites "^2.0.0" + +caller-path@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/caller-path/-/caller-path-2.0.0.tgz" + integrity sha1-Ro+DBE42mrIBD6xfBs7uFbsssfQ= + dependencies: + caller-callsite "^2.0.0" + +callsites@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/callsites/-/callsites-2.0.0.tgz" + integrity sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA= + +camelcase@5.0.0: + version "5.0.0" + resolved "https://registry.npmjs.org/camelcase/-/camelcase-5.0.0.tgz" + integrity sha512-faqwZqnWxbxn+F1d399ygeamQNy3lPp/H9H6rNrqYh4FSVCtcY+3cub1MxA8o9mDd55mM8Aghuu/kuyYA6VTsA== + +camelcase@5.3.1, camelcase@^5.0.0, camelcase@^5.3.1: + version "5.3.1" + resolved "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz" + integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== + +caniuse-api@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/caniuse-api/-/caniuse-api-3.0.0.tgz" + integrity sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw== + dependencies: + browserslist "^4.0.0" + caniuse-lite "^1.0.0" + lodash.memoize "^4.1.2" + lodash.uniq "^4.5.0" + +caniuse-lite@^1.0.0, caniuse-lite@^1.0.30001032, caniuse-lite@^1.0.30001061, caniuse-lite@^1.0.30001280: + version "1.0.30001285" + resolved "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001285.tgz" + integrity sha512-KAOkuUtcQ901MtmvxfKD+ODHH9YVDYnBt+TGYSz2KIfnq22CiArbUxXPN9067gNbgMlnNYRSwho8OPXZPALB9Q== + +canonical-path@1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/canonical-path/-/canonical-path-1.0.0.tgz" + integrity sha512-feylzsbDxi1gPZ1IjystzIQZagYYLvfKrSuygUCgf7z6x790VEzze5QEkdSV1U58RA7Hi0+v6fv4K54atOzATg== + +caseless@~0.12.0: + version "0.12.0" + resolved "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz" + integrity sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw= + +chalk@^1.1.1, chalk@^1.1.3: + version "1.1.3" + resolved "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz" + integrity sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg= + dependencies: + ansi-styles "^2.2.1" + escape-string-regexp "^1.0.2" + has-ansi "^2.0.0" + strip-ansi "^3.0.0" + supports-color "^2.0.0" + +chalk@^2.0.0, chalk@^2.0.1, chalk@^2.3.0, chalk@^2.4.1, chalk@^2.4.2: + version "2.4.2" + resolved "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz" + integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== + dependencies: + ansi-styles "^3.2.1" + escape-string-regexp "^1.0.5" + supports-color "^5.3.0" + +chalk@^4.1.0: + version "4.1.2" + resolved "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz" + integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== + dependencies: + ansi-styles "^4.1.0" + supports-color "^7.1.0" + +chardet@^0.7.0: + version "0.7.0" + resolved "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz" + integrity sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA== + +chokidar@3.3.0: + version "3.3.0" + resolved "https://registry.npmjs.org/chokidar/-/chokidar-3.3.0.tgz" + integrity sha512-dGmKLDdT3Gdl7fBUe8XK+gAtGmzy5Fn0XkkWQuYxGIgWVPPse2CxFA5mtrlD0TOHaHjEUqkWNyP1XdHoJES/4A== + dependencies: + anymatch "~3.1.1" + braces "~3.0.2" + glob-parent "~5.1.0" + is-binary-path "~2.1.0" + is-glob "~4.0.1" + normalize-path "~3.0.0" + readdirp "~3.2.0" + optionalDependencies: + fsevents "~2.1.1" + +"chokidar@>=2.0.0 <4.0.0", chokidar@^3.0.0, chokidar@^3.4.1: + version "3.5.2" + resolved "https://registry.npmjs.org/chokidar/-/chokidar-3.5.2.tgz" + integrity sha512-ekGhOnNVPgT77r4K/U3GDhu+FQ2S8TnK/s2KbIGXi0SZWuwkZ2QNyfWdZW+TVfn84DpEP7rLeCt2UI6bJ8GwbQ== + dependencies: + anymatch "~3.1.2" + braces "~3.0.2" + glob-parent "~5.1.2" + is-binary-path "~2.1.0" + is-glob "~4.0.1" + normalize-path "~3.0.0" + readdirp "~3.6.0" + optionalDependencies: + fsevents "~2.3.2" + +chokidar@^2.1.8: + version "2.1.8" + resolved "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz" + integrity sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg== + dependencies: + anymatch "^2.0.0" + async-each "^1.0.1" + braces "^2.3.2" + glob-parent "^3.1.0" + inherits "^2.0.3" + is-binary-path "^1.0.0" + is-glob "^4.0.0" + normalize-path "^3.0.0" + path-is-absolute "^1.0.0" + readdirp "^2.2.1" + upath "^1.1.1" + optionalDependencies: + fsevents "^1.2.7" + +chownr@^1.1.1, chownr@^1.1.2, chownr@^1.1.4: + version "1.1.4" + resolved "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz" + integrity sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg== + +chownr@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz" + integrity sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ== + +chrome-trace-event@^1.0.2: + version "1.0.3" + resolved "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz" + integrity sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg== + +cipher-base@^1.0.0, cipher-base@^1.0.1, cipher-base@^1.0.3: + version "1.0.4" + resolved "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz" + integrity sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q== + dependencies: + inherits "^2.0.1" + safe-buffer "^5.0.1" + +circular-dependency-plugin@5.2.0: + version "5.2.0" + resolved "https://registry.npmjs.org/circular-dependency-plugin/-/circular-dependency-plugin-5.2.0.tgz" + integrity sha512-7p4Kn/gffhQaavNfyDFg7LS5S/UT1JAjyGd4UqR2+jzoYF02eDkj0Ec3+48TsIa4zghjLY87nQHIh/ecK9qLdw== + +class-utils@^0.3.5: + version "0.3.6" + resolved "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz" + integrity sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg== + dependencies: + arr-union "^3.1.0" + define-property "^0.2.5" + isobject "^3.0.0" + static-extend "^0.1.1" + +clean-stack@^2.0.0: + version "2.2.0" + resolved "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz" + integrity sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A== + +cli-cursor@^3.1.0: + version "3.1.0" + resolved "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz" + integrity sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw== + dependencies: + restore-cursor "^3.1.0" + +cli-spinners@^2.4.0, cli-spinners@^2.5.0: + version "2.6.1" + resolved "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.6.1.tgz" + integrity sha512-x/5fWmGMnbKQAaNwN+UZlV79qBLM9JFnJuJ03gIi5whrob0xV0ofNVHy9DhwGdsMJQc2OKv0oGmLzvaqvAVv+g== + +cli-width@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz" + integrity sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw== + +cliui@^5.0.0: + version "5.0.0" + resolved "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz" + integrity sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA== + dependencies: + string-width "^3.1.0" + strip-ansi "^5.2.0" + wrap-ansi "^5.1.0" + +cliui@^6.0.0: + version "6.0.0" + resolved "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz" + integrity sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ== + dependencies: + string-width "^4.2.0" + strip-ansi "^6.0.0" + wrap-ansi "^6.2.0" + +cliui@^7.0.2: + version "7.0.4" + resolved "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz" + integrity sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ== + dependencies: + string-width "^4.2.0" + strip-ansi "^6.0.0" + wrap-ansi "^7.0.0" + +clone-deep@^4.0.1: + version "4.0.1" + resolved "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz" + integrity sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ== + dependencies: + is-plain-object "^2.0.4" + kind-of "^6.0.2" + shallow-clone "^3.0.0" + +clone@^1.0.2: + version "1.0.4" + resolved "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz" + integrity sha1-2jCcwmPfFZlMaIypAheco8fNfH4= + +clone@^2.1.2: + version "2.1.2" + resolved "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz" + integrity sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18= + +coa@^2.0.2: + version "2.0.2" + resolved "https://registry.npmjs.org/coa/-/coa-2.0.2.tgz" + integrity sha512-q5/jG+YQnSy4nRTV4F7lPepBJZ8qBNJJDBuJdoejDyLXgmL7IEo+Le2JDZudFTFt7mrCqIRaSjws4ygRCTCAXA== + dependencies: + "@types/q" "^1.5.1" + chalk "^2.4.1" + q "^1.1.2" + +codelyzer@^5.1.2: + version "5.2.2" + resolved "https://registry.npmjs.org/codelyzer/-/codelyzer-5.2.2.tgz" + integrity sha512-jB4FZ1Sx7kZhvZVdf+N2BaKTdrrNZOL0Bj10RRfrhHrb3zEvXjJvvq298JPMJAiyiCS/v4zs1QlGU0ip7xGqeA== + dependencies: + app-root-path "^2.2.1" + aria-query "^3.0.0" + axobject-query "2.0.2" + css-selector-tokenizer "^0.7.1" + cssauron "^1.4.0" + damerau-levenshtein "^1.0.4" + semver-dsl "^1.0.1" + source-map "^0.5.7" + sprintf-js "^1.1.2" + +collection-visit@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz" + integrity sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA= + dependencies: + map-visit "^1.0.0" + object-visit "^1.0.0" + +color-convert@^1.9.0, color-convert@^1.9.3: + version "1.9.3" + resolved "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz" + integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== + dependencies: + color-name "1.1.3" + +color-convert@^2.0.1: + version "2.0.1" + resolved "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz" + integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== + dependencies: + color-name "~1.1.4" + +color-name@1.1.3: + version "1.1.3" + resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz" + integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= + +color-name@^1.0.0, color-name@~1.1.4: + version "1.1.4" + resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz" + integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== + +color-string@^1.6.0: + version "1.9.0" + resolved "https://registry.npmjs.org/color-string/-/color-string-1.9.0.tgz" + integrity sha512-9Mrz2AQLefkH1UvASKj6v6hj/7eWgjnT/cVsR8CumieLoT+g900exWeNogqtweI8dxloXN9BDQTYro1oWu/5CQ== + dependencies: + color-name "^1.0.0" + simple-swizzle "^0.2.2" + +color@^3.0.0: + version "3.2.1" + resolved "https://registry.npmjs.org/color/-/color-3.2.1.tgz" + integrity sha512-aBl7dZI9ENN6fUGC7mWpMTPNHmWUSNan9tuWN6ahh5ZLNk9baLJOnSMlrQkHcrfFgz2/RigjUVAjdx36VcemKA== + dependencies: + color-convert "^1.9.3" + color-string "^1.6.0" + +colors@1.4.0, colors@^1.4.0: + version "1.4.0" + resolved "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz" + integrity sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA== + +combined-stream@^1.0.6, combined-stream@~1.0.6: + version "1.0.8" + resolved "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz" + integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== + dependencies: + delayed-stream "~1.0.0" + +commander@^2.11.0, commander@^2.12.1, commander@^2.20.0, commander@^2.7.1: + version "2.20.3" + resolved "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz" + integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== + +commander@~4.1.1: + version "4.1.1" + resolved "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz" + integrity sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA== + +commondir@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz" + integrity sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs= + +component-bind@1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/component-bind/-/component-bind-1.0.0.tgz" + integrity sha1-AMYIq33Nk4l8AAllGx06jh5zu9E= + +component-emitter@1.2.1: + version "1.2.1" + resolved "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz" + integrity sha1-E3kY1teCg/ffemt8WmPhQOaUJeY= + +component-emitter@^1.2.0, component-emitter@^1.2.1, component-emitter@~1.3.0: + version "1.3.0" + resolved "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz" + integrity sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg== + +component-inherit@0.0.3: + version "0.0.3" + resolved "https://registry.npmjs.org/component-inherit/-/component-inherit-0.0.3.tgz" + integrity sha1-ZF/ErfWLcrZJ1crmUTVhnbJv8UM= + +compose-function@3.0.3: + version "3.0.3" + resolved "https://registry.npmjs.org/compose-function/-/compose-function-3.0.3.tgz" + integrity sha1-ntZ18TzFRQHTCVCkhv9qe6OrGF8= + dependencies: + arity-n "^1.0.4" + +compressible@~2.0.16: + version "2.0.18" + resolved "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz" + integrity sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg== + dependencies: + mime-db ">= 1.43.0 < 2" + +compression@^1.7.4: + version "1.7.4" + resolved "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz" + integrity sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ== + dependencies: + accepts "~1.3.5" + bytes "3.0.0" + compressible "~2.0.16" + debug "2.6.9" + on-headers "~1.0.2" + safe-buffer "5.1.2" + vary "~1.1.2" + +concat-map@0.0.1: + version "0.0.1" + resolved "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz" + integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= + +concat-stream@^1.5.0: + version "1.6.2" + resolved "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz" + integrity sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw== + dependencies: + buffer-from "^1.0.0" + inherits "^2.0.3" + readable-stream "^2.2.2" + typedarray "^0.0.6" + +connect-history-api-fallback@^1.6.0: + version "1.6.0" + resolved "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-1.6.0.tgz" + integrity sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg== + +connect@^3.7.0: + version "3.7.0" + resolved "https://registry.npmjs.org/connect/-/connect-3.7.0.tgz" + integrity sha512-ZqRXc+tZukToSNmh5C2iWMSoV3X1YUcPbqEM4DkEG5tNQXrQUZCNVGGv3IuicnkMtPfGf3Xtp8WCXs295iQ1pQ== + dependencies: + debug "2.6.9" + finalhandler "1.1.2" + parseurl "~1.3.3" + utils-merge "1.0.1" + +console-browserify@^1.1.0: + version "1.2.0" + resolved "https://registry.npmjs.org/console-browserify/-/console-browserify-1.2.0.tgz" + integrity sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA== + +constants-browserify@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz" + integrity sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U= + +content-disposition@0.5.3: + version "0.5.3" + resolved "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz" + integrity sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g== + dependencies: + safe-buffer "5.1.2" + +content-type@~1.0.4: + version "1.0.4" + resolved "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz" + integrity sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA== + +convert-source-map@1.7.0: + version "1.7.0" + resolved "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.7.0.tgz" + integrity sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA== + dependencies: + safe-buffer "~5.1.1" + +convert-source-map@^0.3.3: + version "0.3.5" + resolved "https://registry.npmjs.org/convert-source-map/-/convert-source-map-0.3.5.tgz" + integrity sha1-8dgClQr33SYxof6+BZZVDIarMZA= + +convert-source-map@^1.5.1, convert-source-map@^1.7.0: + version "1.8.0" + resolved "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz" + integrity sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA== + dependencies: + safe-buffer "~5.1.1" + +cookie-signature@1.0.6: + version "1.0.6" + resolved "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz" + integrity sha1-4wOogrNCzD7oylE6eZmXNNqzriw= + +cookie@0.4.0: + version "0.4.0" + resolved "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz" + integrity sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg== + +cookie@~0.4.1: + version "0.4.1" + resolved "https://registry.npmjs.org/cookie/-/cookie-0.4.1.tgz" + integrity sha512-ZwrFkGJxUR3EIoXtO+yVE69Eb7KlixbaeAWfBQB9vVsNn/o+Yw69gBWSSDK825hQNdN+wF8zELf3dFNl/kxkUA== + +cookiejar@^2.1.0: + version "2.1.3" + resolved "https://registry.npmjs.org/cookiejar/-/cookiejar-2.1.3.tgz" + integrity sha512-JxbCBUdrfr6AQjOXrxoTvAMJO4HBTUIlBzslcJPAz+/KT8yk53fXun51u+RenNYvad/+Vc2DIz5o9UxlCDymFQ== + +copy-anything@^2.0.1: + version "2.0.3" + resolved "https://registry.npmjs.org/copy-anything/-/copy-anything-2.0.3.tgz" + integrity sha512-GK6QUtisv4fNS+XcI7shX0Gx9ORg7QqIznyfho79JTnX1XhLiyZHfftvGiziqzRiEi/Bjhgpi+D2o7HxJFPnDQ== + dependencies: + is-what "^3.12.0" + +copy-concurrently@^1.0.0: + version "1.0.5" + resolved "https://registry.npmjs.org/copy-concurrently/-/copy-concurrently-1.0.5.tgz" + integrity sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A== + dependencies: + aproba "^1.1.1" + fs-write-stream-atomic "^1.0.8" + iferr "^0.1.5" + mkdirp "^0.5.1" + rimraf "^2.5.4" + run-queue "^1.0.0" + +copy-descriptor@^0.1.0: + version "0.1.1" + resolved "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz" + integrity sha1-Z29us8OZl8LuGsOpJP1hJHSPV40= + +copy-webpack-plugin@6.0.3: + version "6.0.3" + resolved "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-6.0.3.tgz" + integrity sha512-q5m6Vz4elsuyVEIUXr7wJdIdePWTubsqVbEMvf1WQnHGv0Q+9yPRu7MtYFPt+GBOXRav9lvIINifTQ1vSCs+eA== + dependencies: + cacache "^15.0.4" + fast-glob "^3.2.4" + find-cache-dir "^3.3.1" + glob-parent "^5.1.1" + globby "^11.0.1" + loader-utils "^2.0.0" + normalize-path "^3.0.0" + p-limit "^3.0.1" + schema-utils "^2.7.0" + serialize-javascript "^4.0.0" + webpack-sources "^1.4.3" + +copy-webpack-plugin@^9.0.0: + version "9.1.0" + resolved "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-9.1.0.tgz" + integrity sha512-rxnR7PaGigJzhqETHGmAcxKnLZSR5u1Y3/bcIv/1FnqXedcL/E2ewK7ZCNrArJKCiSv8yVXhTqetJh8inDvfsA== + dependencies: + fast-glob "^3.2.7" + glob-parent "^6.0.1" + globby "^11.0.3" + normalize-path "^3.0.0" + schema-utils "^3.1.1" + serialize-javascript "^6.0.0" + +core-js-compat@^3.6.2: + version "3.19.3" + resolved "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.19.3.tgz" + integrity sha512-59tYzuWgEEVU9r+SRgceIGXSSUn47JknoiXW6Oq7RW8QHjXWz3/vp8pa7dbtuVu40sewz3OP3JmQEcDdztrLhA== + dependencies: + browserslist "^4.18.1" + semver "7.0.0" + +core-js@3.6.4: + version "3.6.4" + resolved "https://registry.npmjs.org/core-js/-/core-js-3.6.4.tgz" + integrity sha512-4paDGScNgZP2IXXilaffL9X7968RuvwlkK3xWtZRVqgd8SYNiVKRJvkFd1aqqEuPfN7E68ZHEp9hDj6lHj4Hyw== + +core-js@^2.4.1: + version "2.6.12" + resolved "https://registry.npmjs.org/core-js/-/core-js-2.6.12.tgz" + integrity sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ== + +core-util-is@1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz" + integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac= + +core-util-is@~1.0.0: + version "1.0.3" + resolved "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz" + integrity sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ== + +cosmiconfig@^5.0.0: + version "5.2.1" + resolved "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-5.2.1.tgz" + integrity sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA== + dependencies: + import-fresh "^2.0.0" + is-directory "^0.3.1" + js-yaml "^3.13.1" + parse-json "^4.0.0" + +country-state-city@^3.0.1: + version "3.0.1" + resolved "https://registry.npmjs.org/country-state-city/-/country-state-city-3.0.1.tgz" + integrity sha512-vOEg/Q3uOmlvXrByBUJ9/aVSeekM7a//QNcR+ftNr2F9C4LJN3bSIWXgwm5BOF1Lr5d6JVeKg9h/zFz6nW19eA== + dependencies: + copy-webpack-plugin "^9.0.0" + +create-ecdh@^4.0.0: + version "4.0.4" + resolved "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.4.tgz" + integrity sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A== + dependencies: + bn.js "^4.1.0" + elliptic "^6.5.3" + +create-hash@^1.1.0, create-hash@^1.1.2, create-hash@^1.2.0: + version "1.2.0" + resolved "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz" + integrity sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg== + dependencies: + cipher-base "^1.0.1" + inherits "^2.0.1" + md5.js "^1.3.4" + ripemd160 "^2.0.1" + sha.js "^2.4.0" + +create-hmac@^1.1.0, create-hmac@^1.1.4, create-hmac@^1.1.7: + version "1.1.7" + resolved "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz" + integrity sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg== + dependencies: + cipher-base "^1.0.3" + create-hash "^1.1.0" + inherits "^2.0.1" + ripemd160 "^2.0.0" + safe-buffer "^5.0.1" + sha.js "^2.4.8" + +cross-spawn@^6.0.0: + version "6.0.5" + resolved "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz" + integrity sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ== + dependencies: + nice-try "^1.0.4" + path-key "^2.0.1" + semver "^5.5.0" + shebang-command "^1.2.0" + which "^1.2.9" + +crypto-browserify@^3.11.0: + version "3.12.0" + resolved "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz" + integrity sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg== + dependencies: + browserify-cipher "^1.0.0" + browserify-sign "^4.0.0" + create-ecdh "^4.0.0" + create-hash "^1.1.0" + create-hmac "^1.1.0" + diffie-hellman "^5.0.0" + inherits "^2.0.1" + pbkdf2 "^3.0.3" + public-encrypt "^4.0.0" + randombytes "^2.0.0" + randomfill "^1.0.3" + +css-color-names@0.0.4, css-color-names@^0.0.4: + version "0.0.4" + resolved "https://registry.npmjs.org/css-color-names/-/css-color-names-0.0.4.tgz" + integrity sha1-gIrcLnnPhHOAabZGyyDsJ762KeA= + +css-declaration-sorter@^4.0.1: + version "4.0.1" + resolved "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-4.0.1.tgz" + integrity sha512-BcxQSKTSEEQUftYpBVnsH4SF05NTuBokb19/sBt6asXGKZ/6VP7PLG1CBCkFDYOnhXhPh0jMhO6xZ71oYHXHBA== + dependencies: + postcss "^7.0.1" + timsort "^0.3.0" + +css-loader@3.5.3: + version "3.5.3" + resolved "https://registry.npmjs.org/css-loader/-/css-loader-3.5.3.tgz" + integrity sha512-UEr9NH5Lmi7+dguAm+/JSPovNjYbm2k3TK58EiwQHzOHH5Jfq1Y+XoP2bQO6TMn7PptMd0opxxedAWcaSTRKHw== + dependencies: + camelcase "^5.3.1" + cssesc "^3.0.0" + icss-utils "^4.1.1" + loader-utils "^1.2.3" + normalize-path "^3.0.0" + postcss "^7.0.27" + postcss-modules-extract-imports "^2.0.0" + postcss-modules-local-by-default "^3.0.2" + postcss-modules-scope "^2.2.0" + postcss-modules-values "^3.0.0" + postcss-value-parser "^4.0.3" + schema-utils "^2.6.6" + semver "^6.3.0" + +css-parse@~2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/css-parse/-/css-parse-2.0.0.tgz" + integrity sha1-pGjuZnwW2BzPBcWMONKpfHgNv9Q= + dependencies: + css "^2.0.0" + +css-select-base-adapter@^0.1.1: + version "0.1.1" + resolved "https://registry.npmjs.org/css-select-base-adapter/-/css-select-base-adapter-0.1.1.tgz" + integrity sha512-jQVeeRG70QI08vSTwf1jHxp74JoZsr2XSgETae8/xC8ovSnL2WF87GTLO86Sbwdt2lK4Umg4HnnwMO4YF3Ce7w== + +css-select@^2.0.0: + version "2.1.0" + resolved "https://registry.npmjs.org/css-select/-/css-select-2.1.0.tgz" + integrity sha512-Dqk7LQKpwLoH3VovzZnkzegqNSuAziQyNZUcrdDM401iY+R5NkGBXGmtO05/yaXQziALuPogeG0b7UAgjnTJTQ== + dependencies: + boolbase "^1.0.0" + css-what "^3.2.1" + domutils "^1.7.0" + nth-check "^1.0.2" + +css-selector-tokenizer@^0.7.1: + version "0.7.3" + resolved "https://registry.npmjs.org/css-selector-tokenizer/-/css-selector-tokenizer-0.7.3.tgz" + integrity sha512-jWQv3oCEL5kMErj4wRnK/OPoBi0D+P1FR2cDCKYPaMeD2eW3/mttav8HT4hT1CKopiJI/psEULjkClhvJo4Lvg== + dependencies: + cssesc "^3.0.0" + fastparse "^1.1.2" + +css-tree@1.0.0-alpha.37: + version "1.0.0-alpha.37" + resolved "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha.37.tgz" + integrity sha512-DMxWJg0rnz7UgxKT0Q1HU/L9BeJI0M6ksor0OgqOnF+aRCDWg/N2641HmVyU9KVIu0OVVWOb2IpC9A+BJRnejg== + dependencies: + mdn-data "2.0.4" + source-map "^0.6.1" + +css-tree@^1.1.2: + version "1.1.3" + resolved "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz" + integrity sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q== + dependencies: + mdn-data "2.0.14" + source-map "^0.6.1" + +css-what@^3.2.1: + version "3.4.2" + resolved "https://registry.npmjs.org/css-what/-/css-what-3.4.2.tgz" + integrity sha512-ACUm3L0/jiZTqfzRM3Hi9Q8eZqd6IK37mMWPLz9PJxkLWllYeRf+EHUSHYEtFop2Eqytaq1FizFVh7XfBnXCDQ== + +css@^2.0.0: + version "2.2.4" + resolved "https://registry.npmjs.org/css/-/css-2.2.4.tgz" + integrity sha512-oUnjmWpy0niI3x/mPL8dVEI1l7MnG3+HHyRPHf+YFSbK+svOhXpmSOcDURUh2aOCgl2grzrOPt1nHLuCVFULLw== + dependencies: + inherits "^2.0.3" + source-map "^0.6.1" + source-map-resolve "^0.5.2" + urix "^0.1.0" + +cssauron@^1.4.0: + version "1.4.0" + resolved "https://registry.npmjs.org/cssauron/-/cssauron-1.4.0.tgz" + integrity sha1-pmAt/34EqDBtwNuaVR6S6LVmKtg= + dependencies: + through X.X.X + +cssesc@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz" + integrity sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg== + +cssnano-preset-default@^4.0.7: + version "4.0.8" + resolved "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-4.0.8.tgz" + integrity sha512-LdAyHuq+VRyeVREFmuxUZR1TXjQm8QQU/ktoo/x7bz+SdOge1YKc5eMN6pRW7YWBmyq59CqYba1dJ5cUukEjLQ== + dependencies: + css-declaration-sorter "^4.0.1" + cssnano-util-raw-cache "^4.0.1" + postcss "^7.0.0" + postcss-calc "^7.0.1" + postcss-colormin "^4.0.3" + postcss-convert-values "^4.0.1" + postcss-discard-comments "^4.0.2" + postcss-discard-duplicates "^4.0.2" + postcss-discard-empty "^4.0.1" + postcss-discard-overridden "^4.0.1" + postcss-merge-longhand "^4.0.11" + postcss-merge-rules "^4.0.3" + postcss-minify-font-values "^4.0.2" + postcss-minify-gradients "^4.0.2" + postcss-minify-params "^4.0.2" + postcss-minify-selectors "^4.0.2" + postcss-normalize-charset "^4.0.1" + postcss-normalize-display-values "^4.0.2" + postcss-normalize-positions "^4.0.2" + postcss-normalize-repeat-style "^4.0.2" + postcss-normalize-string "^4.0.2" + postcss-normalize-timing-functions "^4.0.2" + postcss-normalize-unicode "^4.0.1" + postcss-normalize-url "^4.0.1" + postcss-normalize-whitespace "^4.0.2" + postcss-ordered-values "^4.1.2" + postcss-reduce-initial "^4.0.3" + postcss-reduce-transforms "^4.0.2" + postcss-svgo "^4.0.3" + postcss-unique-selectors "^4.0.1" + +cssnano-util-get-arguments@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/cssnano-util-get-arguments/-/cssnano-util-get-arguments-4.0.0.tgz" + integrity sha1-7ToIKZ8h11dBsg87gfGU7UnMFQ8= + +cssnano-util-get-match@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/cssnano-util-get-match/-/cssnano-util-get-match-4.0.0.tgz" + integrity sha1-wOTKB/U4a7F+xeUiULT1lhNlFW0= + +cssnano-util-raw-cache@^4.0.1: + version "4.0.1" + resolved "https://registry.npmjs.org/cssnano-util-raw-cache/-/cssnano-util-raw-cache-4.0.1.tgz" + integrity sha512-qLuYtWK2b2Dy55I8ZX3ky1Z16WYsx544Q0UWViebptpwn/xDBmog2TLg4f+DBMg1rJ6JDWtn96WHbOKDWt1WQA== + dependencies: + postcss "^7.0.0" + +cssnano-util-same-parent@^4.0.0: + version "4.0.1" + resolved "https://registry.npmjs.org/cssnano-util-same-parent/-/cssnano-util-same-parent-4.0.1.tgz" + integrity sha512-WcKx5OY+KoSIAxBW6UBBRay1U6vkYheCdjyVNDm85zt5K9mHoGOfsOsqIszfAqrQQFIIKgjh2+FDgIj/zsl21Q== + +cssnano@4.1.10: + version "4.1.10" + resolved "https://registry.npmjs.org/cssnano/-/cssnano-4.1.10.tgz" + integrity sha512-5wny+F6H4/8RgNlaqab4ktc3e0/blKutmq8yNlBFXA//nSFFAqAngjNVRzUvCgYROULmZZUoosL/KSoZo5aUaQ== + dependencies: + cosmiconfig "^5.0.0" + cssnano-preset-default "^4.0.7" + is-resolvable "^1.0.0" + postcss "^7.0.0" + +csso@^4.0.2: + version "4.2.0" + resolved "https://registry.npmjs.org/csso/-/csso-4.2.0.tgz" + integrity sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA== + dependencies: + css-tree "^1.1.2" + +custom-event@~1.0.0: + version "1.0.1" + resolved "https://registry.npmjs.org/custom-event/-/custom-event-1.0.1.tgz" + integrity sha1-XQKkaFCt8bSjF5RqOSj8y1v9BCU= + +cyclist@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/cyclist/-/cyclist-1.0.1.tgz" + integrity sha1-WW6WmP0MgOEgOMK4LW6xs1tiJNk= + +d@1, d@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/d/-/d-1.0.1.tgz" + integrity sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA== + dependencies: + es5-ext "^0.10.50" + type "^1.0.1" + +damerau-levenshtein@^1.0.4: + version "1.0.7" + resolved "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.7.tgz" + integrity sha512-VvdQIPGdWP0SqFXghj79Wf/5LArmreyMsGLa6FG6iC4t3j7j5s71TrwWmT/4akbDQIqjfACkLZmjXhA7g2oUZw== + +dashdash@^1.12.0: + version "1.14.1" + resolved "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz" + integrity sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA= + dependencies: + assert-plus "^1.0.0" + +data-urls@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/data-urls/-/data-urls-2.0.0.tgz" + integrity sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ== + dependencies: + abab "^2.0.3" + whatwg-mimetype "^2.3.0" + whatwg-url "^8.0.0" + +date-fns@2.0.0-alpha.1: + version "2.0.0-alpha.1" + resolved "https://registry.npmjs.org/date-fns/-/date-fns-2.0.0-alpha.1.tgz" + integrity sha512-4gYdF1rDgv9X/0ko69pt+FgpQtDU5rgqZVmckIOhDicfCSTndwHMhUhLJw+pa4DlPdzIkEBtHg6L6VlQ6ueD1g== + +date-format@^2.1.0: + version "2.1.0" + resolved "https://registry.npmjs.org/date-format/-/date-format-2.1.0.tgz" + integrity sha512-bYQuGLeFxhkxNOF3rcMtiZxvCBAquGzZm6oWA1oZ0g2THUzivaRhv8uOhdr19LmoobSOLoIAxeUK2RdbM8IFTA== + +date-format@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/date-format/-/date-format-3.0.0.tgz" + integrity sha512-eyTcpKOcamdhWJXj56DpQMo1ylSQpcGtGKXcU0Tb97+K56/CF5amAqqqNj0+KvA0iw2ynxtHWFsPDSClCxe48w== + +debug@2.6.9, debug@^2.2.0, debug@^2.3.3: + version "2.6.9" + resolved "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz" + integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== + dependencies: + ms "2.0.0" + +debug@3.1.0, debug@~3.1.0: + version "3.1.0" + resolved "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz" + integrity sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g== + dependencies: + ms "2.0.0" + +debug@3.2.6: + version "3.2.6" + resolved "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz" + integrity sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ== + dependencies: + ms "^2.1.1" + +debug@4.1.1, debug@~4.1.0: + version "4.1.1" + resolved "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz" + integrity sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw== + dependencies: + ms "^2.1.1" + +debug@^3.1.0, debug@^3.1.1, debug@^3.2.5: + version "3.2.7" + resolved "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz" + integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ== + dependencies: + ms "^2.1.1" + +debug@^4.1.0, debug@^4.1.1: + version "4.3.3" + resolved "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz" + integrity sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q== + dependencies: + ms "2.1.2" + +debuglog@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/debuglog/-/debuglog-1.0.1.tgz" + integrity sha1-qiT/uaw9+aI1GDfPstJ5NgzXhJI= + +decamelize@^1.2.0: + version "1.2.0" + resolved "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz" + integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA= + +decode-uri-component@^0.2.0: + version "0.2.0" + resolved "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz" + integrity sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU= + +deep-diff@^0.3.5: + version "0.3.8" + resolved "https://registry.npmjs.org/deep-diff/-/deep-diff-0.3.8.tgz" + integrity sha1-wB3mPvsO7JeYgB1Ax+Da4ltYLIQ= + +deep-equal@^1.0.1: + version "1.1.1" + resolved "https://registry.npmjs.org/deep-equal/-/deep-equal-1.1.1.tgz" + integrity sha512-yd9c5AdiqVcR+JjcwUQb9DkhJc8ngNr0MahEBGvDiJw8puWab2yZlh+nkasOnZP+EGTAP6rRp2JzJhJZzvNF8g== + dependencies: + is-arguments "^1.0.4" + is-date-object "^1.0.1" + is-regex "^1.0.4" + object-is "^1.0.1" + object-keys "^1.1.1" + regexp.prototype.flags "^1.2.0" + +default-gateway@^4.2.0: + version "4.2.0" + resolved "https://registry.npmjs.org/default-gateway/-/default-gateway-4.2.0.tgz" + integrity sha512-h6sMrVB1VMWVrW13mSc6ia/DwYYw5MN6+exNu1OaJeFac5aSAvwM7lZ0NVfTABuSkQelr4h5oebg3KB1XPdjgA== + dependencies: + execa "^1.0.0" + ip-regex "^2.1.0" + +defaults@^1.0.3: + version "1.0.3" + resolved "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz" + integrity sha1-xlYFHpgX2f8I7YgUd/P+QBnz730= + dependencies: + clone "^1.0.2" + +define-properties@^1.1.2, define-properties@^1.1.3: + version "1.1.3" + resolved "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz" + integrity sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ== + dependencies: + object-keys "^1.0.12" + +define-property@^0.2.5: + version "0.2.5" + resolved "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz" + integrity sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY= + dependencies: + is-descriptor "^0.1.0" + +define-property@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz" + integrity sha1-dp66rz9KY6rTr56NMEybvnm/sOY= + dependencies: + is-descriptor "^1.0.0" + +define-property@^2.0.2: + version "2.0.2" + resolved "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz" + integrity sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ== + dependencies: + is-descriptor "^1.0.2" + isobject "^3.0.1" + +del@^2.2.0: + version "2.2.2" + resolved "https://registry.npmjs.org/del/-/del-2.2.2.tgz" + integrity sha1-wSyYHQZ4RshLyvhiz/kw2Qf/0ag= + dependencies: + globby "^5.0.0" + is-path-cwd "^1.0.0" + is-path-in-cwd "^1.0.0" + object-assign "^4.0.1" + pify "^2.0.0" + pinkie-promise "^2.0.0" + rimraf "^2.2.8" + +del@^4.1.1: + version "4.1.1" + resolved "https://registry.npmjs.org/del/-/del-4.1.1.tgz" + integrity sha512-QwGuEUouP2kVwQenAsOof5Fv8K9t3D8Ca8NxcXKrIpEHjTXK5J2nXLdP+ALI1cgv8wj7KuwBhTwBkOZSJKM5XQ== + dependencies: + "@types/glob" "^7.1.1" + globby "^6.1.0" + is-path-cwd "^2.0.0" + is-path-in-cwd "^2.0.0" + p-map "^2.0.0" + pify "^4.0.1" + rimraf "^2.6.3" + +delayed-stream@~1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz" + integrity sha1-3zrhmayt+31ECqrgsp4icrJOxhk= + +depd@~1.1.2: + version "1.1.2" + resolved "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz" + integrity sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak= + +dependency-graph@^0.7.2: + version "0.7.2" + resolved "https://registry.npmjs.org/dependency-graph/-/dependency-graph-0.7.2.tgz" + integrity sha512-KqtH4/EZdtdfWX0p6MGP9jljvxSY6msy/pRUD4jgNwVpv3v1QmNLlsB3LDSSUg79BRVSn7jI1QPRtArGABovAQ== + +des.js@^1.0.0: + version "1.0.1" + resolved "https://registry.npmjs.org/des.js/-/des.js-1.0.1.tgz" + integrity sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA== + dependencies: + inherits "^2.0.1" + minimalistic-assert "^1.0.0" + +destroy@~1.0.4: + version "1.0.4" + resolved "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz" + integrity sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA= + +detect-indent@^7.0.0: + version "7.0.0" + resolved "https://registry.npmjs.org/detect-indent/-/detect-indent-7.0.0.tgz" + integrity sha512-/6kJlmVv6RDFPqaHC/ZDcU8bblYcoph2dUQ3kB47QqhkUEqXe3VZPELK9BaEMrC73qu+wn0AQ7iSteceN+yuMw== + +detect-node@^2.0.4: + version "2.1.0" + resolved "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz" + integrity sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g== + +dezalgo@^1.0.0: + version "1.0.3" + resolved "https://registry.npmjs.org/dezalgo/-/dezalgo-1.0.3.tgz" + integrity sha1-f3Qt4Gb8dIvI24IFad3c5Jvw1FY= + dependencies: + asap "^2.0.0" + wrappy "1" + +di@^0.0.1: + version "0.0.1" + resolved "https://registry.npmjs.org/di/-/di-0.0.1.tgz" + integrity sha1-gGZJMmzqp8qjMG112YXqJ0i6kTw= + +diff@3.5.0, diff@^3.1.0: + version "3.5.0" + resolved "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz" + integrity sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA== + +diff@^4.0.1: + version "4.0.2" + resolved "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz" + integrity sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A== + +diffie-hellman@^5.0.0: + version "5.0.3" + resolved "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz" + integrity sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg== + dependencies: + bn.js "^4.1.0" + miller-rabin "^4.0.0" + randombytes "^2.0.0" + +dir-glob@^3.0.1: + version "3.0.1" + resolved "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz" + integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA== + dependencies: + path-type "^4.0.0" + +dns-equal@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/dns-equal/-/dns-equal-1.0.0.tgz" + integrity sha1-s55/HabrCnW6nBcySzR1PEfgZU0= + +dns-packet@^1.3.1: + version "1.3.4" + resolved "https://registry.npmjs.org/dns-packet/-/dns-packet-1.3.4.tgz" + integrity sha512-BQ6F4vycLXBvdrJZ6S3gZewt6rcrks9KBgM9vrhW+knGRqc8uEdT7fuCwloc7nny5xNoMJ17HGH0R/6fpo8ECA== + dependencies: + ip "^1.1.0" + safe-buffer "^5.0.1" + +dns-txt@^2.0.2: + version "2.0.2" + resolved "https://registry.npmjs.org/dns-txt/-/dns-txt-2.0.2.tgz" + integrity sha1-uR2Ab10nGI5Ks+fRB9iBocxGQrY= + dependencies: + buffer-indexof "^1.0.0" + +dom-serialize@^2.2.1: + version "2.2.1" + resolved "https://registry.npmjs.org/dom-serialize/-/dom-serialize-2.2.1.tgz" + integrity sha1-ViromZ9Evl6jB29UGdzVnrQ6yVs= + dependencies: + custom-event "~1.0.0" + ent "~2.2.0" + extend "^3.0.0" + void-elements "^2.0.0" + +dom-serializer@0: + version "0.2.2" + resolved "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.2.2.tgz" + integrity sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g== + dependencies: + domelementtype "^2.0.1" + entities "^2.0.0" + +domain-browser@^1.1.1: + version "1.2.0" + resolved "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz" + integrity sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA== + +domelementtype@1: + version "1.3.1" + resolved "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz" + integrity sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w== + +domelementtype@^2.0.1: + version "2.2.0" + resolved "https://registry.npmjs.org/domelementtype/-/domelementtype-2.2.0.tgz" + integrity sha512-DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A== + +domutils@^1.7.0: + version "1.7.0" + resolved "https://registry.npmjs.org/domutils/-/domutils-1.7.0.tgz" + integrity sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg== + dependencies: + dom-serializer "0" + domelementtype "1" + +dot-prop@^5.2.0: + version "5.3.0" + resolved "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz" + integrity sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q== + dependencies: + is-obj "^2.0.0" + +duplexify@^3.4.2, duplexify@^3.6.0: + version "3.7.1" + resolved "https://registry.npmjs.org/duplexify/-/duplexify-3.7.1.tgz" + integrity sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g== + dependencies: + end-of-stream "^1.0.0" + inherits "^2.0.1" + readable-stream "^2.0.0" + stream-shift "^1.0.0" + +ecc-jsbn@~0.1.1: + version "0.1.2" + resolved "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz" + integrity sha1-OoOpBOVDUyh4dMVkt1SThoSamMk= + dependencies: + jsbn "~0.1.0" + safer-buffer "^2.1.0" + +ee-first@1.1.1: + version "1.1.1" + resolved "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz" + integrity sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0= + +electron-to-chromium@^1.3.896: + version "1.4.59" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.59.tgz#657f2588c048fb95975779f8fea101fad854de89" + integrity sha512-AOJ3cAE0TWxz4fQ9zkND5hWrQg16nsZKVz9INOot1oV//u4wWu5xrj9CQMmPTYskkZRunSRc9sAnr4EkexXokg== + +element-closest@^2.0.2: + version "2.0.2" + resolved "https://registry.npmjs.org/element-closest/-/element-closest-2.0.2.tgz" + integrity sha1-cqdAoQdFM4LijfnOXbtajfD5Zuw= + +elliptic@^6.5.3: + version "6.5.4" + resolved "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz" + integrity sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ== + dependencies: + bn.js "^4.11.9" + brorand "^1.1.0" + hash.js "^1.0.0" + hmac-drbg "^1.0.1" + inherits "^2.0.4" + minimalistic-assert "^1.0.1" + minimalistic-crypto-utils "^1.0.1" + +emoji-regex@^7.0.1: + version "7.0.3" + resolved "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz" + integrity sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA== + +emoji-regex@^8.0.0: + version "8.0.0" + resolved "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz" + integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== + +emojis-list@^2.0.0: + version "2.1.0" + resolved "https://registry.npmjs.org/emojis-list/-/emojis-list-2.1.0.tgz" + integrity sha1-TapNnbAPmBmIDHn6RXrlsJof04k= + +emojis-list@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz" + integrity sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q== + +encodeurl@~1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz" + integrity sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k= + +encoding@^0.1.11: + version "0.1.13" + resolved "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz" + integrity sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A== + dependencies: + iconv-lite "^0.6.2" + +end-of-stream@^1.0.0, end-of-stream@^1.1.0: + version "1.4.4" + resolved "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz" + integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== + dependencies: + once "^1.4.0" + +engine.io-client@~3.5.0: + version "3.5.2" + resolved "https://registry.npmjs.org/engine.io-client/-/engine.io-client-3.5.2.tgz" + integrity sha512-QEqIp+gJ/kMHeUun7f5Vv3bteRHppHH/FMBQX/esFj/fuYfjyUKWGMo3VCvIP/V8bE9KcjHmRZrhIz2Z9oNsDA== + dependencies: + component-emitter "~1.3.0" + component-inherit "0.0.3" + debug "~3.1.0" + engine.io-parser "~2.2.0" + has-cors "1.1.0" + indexof "0.0.1" + parseqs "0.0.6" + parseuri "0.0.6" + ws "~7.4.2" + xmlhttprequest-ssl "~1.6.2" + yeast "0.1.2" + +engine.io-parser@~2.2.0: + version "2.2.1" + resolved "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-2.2.1.tgz" + integrity sha512-x+dN/fBH8Ro8TFwJ+rkB2AmuVw9Yu2mockR/p3W8f8YtExwFgDvBDi0GWyb4ZLkpahtDGZgtr3zLovanJghPqg== + dependencies: + after "0.8.2" + arraybuffer.slice "~0.0.7" + base64-arraybuffer "0.1.4" + blob "0.0.5" + has-binary2 "~1.0.2" + +engine.io@~3.5.0: + version "3.5.0" + resolved "https://registry.npmjs.org/engine.io/-/engine.io-3.5.0.tgz" + integrity sha512-21HlvPUKaitDGE4GXNtQ7PLP0Sz4aWLddMPw2VTyFz1FVZqu/kZsJUO8WNpKuE/OCL7nkfRaOui2ZCJloGznGA== + dependencies: + accepts "~1.3.4" + base64id "2.0.0" + cookie "~0.4.1" + debug "~4.1.0" + engine.io-parser "~2.2.0" + ws "~7.4.2" + +enhanced-resolve@4.1.1: + version "4.1.1" + resolved "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.1.1.tgz" + integrity sha512-98p2zE+rL7/g/DzMHMTF4zZlCgeVdJ7yr6xzEpJRYwFYrGi9ANdn5DnJURg6RpBkyk60XYDnWIv51VfIhfNGuA== + dependencies: + graceful-fs "^4.1.2" + memory-fs "^0.5.0" + tapable "^1.0.0" + +enhanced-resolve@^4.1.0: + version "4.5.0" + resolved "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.5.0.tgz" + integrity sha512-Nv9m36S/vxpsI+Hc4/ZGRs0n9mXqSWGGq49zxb/cJfPAQMbUtttJAlNPS4AQzaBdw/pKskw5bMbekT/Y7W/Wlg== + dependencies: + graceful-fs "^4.1.2" + memory-fs "^0.5.0" + tapable "^1.0.0" + +ent@~2.2.0: + version "2.2.0" + resolved "https://registry.npmjs.org/ent/-/ent-2.2.0.tgz" + integrity sha1-6WQhkyWiHQX0RGai9obtbOX13R0= + +entities@^2.0.0: + version "2.2.0" + resolved "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz" + integrity sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A== + +err-code@^1.0.0: + version "1.1.2" + resolved "https://registry.npmjs.org/err-code/-/err-code-1.1.2.tgz" + integrity sha1-BuARbTAo9q70gGhJ6w6mp0iuaWA= + +errno@^0.1.1, errno@^0.1.3, errno@~0.1.7: + version "0.1.8" + resolved "https://registry.npmjs.org/errno/-/errno-0.1.8.tgz" + integrity sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A== + dependencies: + prr "~1.0.1" + +error-ex@^1.3.1: + version "1.3.2" + resolved "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz" + integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== + dependencies: + is-arrayish "^0.2.1" + +es-abstract@^1.17.2, es-abstract@^1.19.1: + version "1.19.1" + resolved "https://registry.npmjs.org/es-abstract/-/es-abstract-1.19.1.tgz" + integrity sha512-2vJ6tjA/UfqLm2MPs7jxVybLoB8i1t1Jd9R3kISld20sIxPcTbLuggQOUxeWeAvIUkduv/CfMjuh4WmiXr2v9w== + dependencies: + call-bind "^1.0.2" + es-to-primitive "^1.2.1" + function-bind "^1.1.1" + get-intrinsic "^1.1.1" + get-symbol-description "^1.0.0" + has "^1.0.3" + has-symbols "^1.0.2" + internal-slot "^1.0.3" + is-callable "^1.2.4" + is-negative-zero "^2.0.1" + is-regex "^1.1.4" + is-shared-array-buffer "^1.0.1" + is-string "^1.0.7" + is-weakref "^1.0.1" + object-inspect "^1.11.0" + object-keys "^1.1.1" + object.assign "^4.1.2" + string.prototype.trimend "^1.0.4" + string.prototype.trimstart "^1.0.4" + unbox-primitive "^1.0.1" + +es-to-primitive@^1.2.1: + version "1.2.1" + resolved "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz" + integrity sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA== + dependencies: + is-callable "^1.1.4" + is-date-object "^1.0.1" + is-symbol "^1.0.2" + +es5-ext@^0.10.35, es5-ext@^0.10.50: + version "0.10.53" + resolved "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.53.tgz" + integrity sha512-Xs2Stw6NiNHWypzRTY1MtaG/uJlwCk8kH81920ma8mvN8Xq1gsfhZvpkImLQArw8AHnv8MT2I45J3c0R8slE+Q== + dependencies: + es6-iterator "~2.0.3" + es6-symbol "~3.1.3" + next-tick "~1.0.0" + +es6-iterator@2.0.3, es6-iterator@~2.0.3: + version "2.0.3" + resolved "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz" + integrity sha1-p96IkUGgWpSwhUQDstCg+/qY87c= + dependencies: + d "1" + es5-ext "^0.10.35" + es6-symbol "^3.1.1" + +es6-promise@^4.0.3: + version "4.2.8" + resolved "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.8.tgz" + integrity sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w== + +es6-promisify@^5.0.0: + version "5.0.0" + resolved "https://registry.npmjs.org/es6-promisify/-/es6-promisify-5.0.0.tgz" + integrity sha1-UQnWLz5W6pZ8S2NQWu8IKRyKUgM= + dependencies: + es6-promise "^4.0.3" + +es6-symbol@^3.1.1, es6-symbol@~3.1.3: + version "3.1.3" + resolved "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.3.tgz" + integrity sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA== + dependencies: + d "^1.0.1" + ext "^1.1.2" + +escalade@^3.1.1: + version "3.1.1" + resolved "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz" + integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== + +escape-html@~1.0.3: + version "1.0.3" + resolved "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz" + integrity sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg= + +escape-string-regexp@1.0.5, escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5: + version "1.0.5" + resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz" + integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= + +eslint-scope@^4.0.3: + version "4.0.3" + resolved "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.3.tgz" + integrity sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg== + dependencies: + esrecurse "^4.1.0" + estraverse "^4.1.1" + +esprima@^4.0.0: + version "4.0.1" + resolved "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz" + integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== + +esrecurse@^4.1.0: + version "4.3.0" + resolved "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz" + integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== + dependencies: + estraverse "^5.2.0" + +estraverse@^4.1.1: + version "4.3.0" + resolved "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz" + integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== + +estraverse@^5.2.0: + version "5.3.0" + resolved "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz" + integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== + +esutils@^2.0.2: + version "2.0.3" + resolved "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz" + integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== + +etag@~1.8.1: + version "1.8.1" + resolved "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz" + integrity sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc= + +eventemitter3@^4.0.0: + version "4.0.7" + resolved "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz" + integrity sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw== + +events@^3.0.0: + version "3.3.0" + resolved "https://registry.npmjs.org/events/-/events-3.3.0.tgz" + integrity sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q== + +eventsource@^1.0.7: + version "1.1.0" + resolved "https://registry.npmjs.org/eventsource/-/eventsource-1.1.0.tgz" + integrity sha512-VSJjT5oCNrFvCS6igjzPAt5hBzQ2qPBFIbJ03zLI9SE0mxwZpMw6BfJrbFHm1a141AavMEB8JHmBhWAd66PfCg== + dependencies: + original "^1.0.0" + +evp_bytestokey@^1.0.0, evp_bytestokey@^1.0.3: + version "1.0.3" + resolved "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz" + integrity sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA== + dependencies: + md5.js "^1.3.4" + safe-buffer "^5.1.1" + +execa@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz" + integrity sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA== + dependencies: + cross-spawn "^6.0.0" + get-stream "^4.0.0" + is-stream "^1.1.0" + npm-run-path "^2.0.0" + p-finally "^1.0.0" + signal-exit "^3.0.0" + strip-eof "^1.0.0" + +exit@^0.1.2: + version "0.1.2" + resolved "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz" + integrity sha1-BjJjj42HfMghB9MKD/8aF8uhzQw= + +expand-brackets@^2.1.4: + version "2.1.4" + resolved "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz" + integrity sha1-t3c14xXOMPa27/D4OwQVGiJEliI= + dependencies: + debug "^2.3.3" + define-property "^0.2.5" + extend-shallow "^2.0.1" + posix-character-classes "^0.1.0" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.1" + +express@^4.17.1: + version "4.17.1" + resolved "https://registry.npmjs.org/express/-/express-4.17.1.tgz" + integrity sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g== + dependencies: + accepts "~1.3.7" + array-flatten "1.1.1" + body-parser "1.19.0" + content-disposition "0.5.3" + content-type "~1.0.4" + cookie "0.4.0" + cookie-signature "1.0.6" + debug "2.6.9" + depd "~1.1.2" + encodeurl "~1.0.2" + escape-html "~1.0.3" + etag "~1.8.1" + finalhandler "~1.1.2" + fresh "0.5.2" + merge-descriptors "1.0.1" + methods "~1.1.2" + on-finished "~2.3.0" + parseurl "~1.3.3" + path-to-regexp "0.1.7" + proxy-addr "~2.0.5" + qs "6.7.0" + range-parser "~1.2.1" + safe-buffer "5.1.2" + send "0.17.1" + serve-static "1.14.1" + setprototypeof "1.1.1" + statuses "~1.5.0" + type-is "~1.6.18" + utils-merge "1.0.1" + vary "~1.1.2" + +ext@^1.1.2: + version "1.6.0" + resolved "https://registry.npmjs.org/ext/-/ext-1.6.0.tgz" + integrity sha512-sdBImtzkq2HpkdRLtlLWDa6w4DX22ijZLKx8BMPUuKe1c5lbN6xwQDQCxSfxBQnHZ13ls/FH0MQZx/q/gr6FQg== + dependencies: + type "^2.5.0" + +extend-shallow@^2.0.1: + version "2.0.1" + resolved "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz" + integrity sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8= + dependencies: + is-extendable "^0.1.0" + +extend-shallow@^3.0.0, extend-shallow@^3.0.2: + version "3.0.2" + resolved "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz" + integrity sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg= + dependencies: + assign-symbols "^1.0.0" + is-extendable "^1.0.1" + +extend@^3.0.0, extend@^3.0.1, extend@~3.0.2: + version "3.0.2" + resolved "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz" + integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== + +external-editor@^3.0.3: + version "3.1.0" + resolved "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz" + integrity sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew== + dependencies: + chardet "^0.7.0" + iconv-lite "^0.4.24" + tmp "^0.0.33" + +extglob@^2.0.4: + version "2.0.4" + resolved "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz" + integrity sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw== + dependencies: + array-unique "^0.3.2" + define-property "^1.0.0" + expand-brackets "^2.1.4" + extend-shallow "^2.0.1" + fragment-cache "^0.2.1" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.1" + +extsprintf@1.3.0, extsprintf@^1.2.0: + version "1.3.0" + resolved "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz" + integrity sha1-lpGEQOMEGnpBT4xS48V06zw+HgU= + +fast-deep-equal@^3.1.1: + version "3.1.3" + resolved "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz" + integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== + +fast-glob@^3.1.1, fast-glob@^3.2.4, fast-glob@^3.2.7: + version "3.2.7" + resolved "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.7.tgz" + integrity sha512-rYGMRwip6lUMvYD3BTScMwT1HtAs2d71SMv66Vrxs0IekGZEjhM0pcMfjQPnknBt2zeCwQMEupiN02ZP4DiT1Q== + dependencies: + "@nodelib/fs.stat" "^2.0.2" + "@nodelib/fs.walk" "^1.2.3" + glob-parent "^5.1.2" + merge2 "^1.3.0" + micromatch "^4.0.4" + +fast-json-stable-stringify@2.1.0, fast-json-stable-stringify@^2.0.0: + version "2.1.0" + resolved "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz" + integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== + +fastparse@^1.1.2: + version "1.1.2" + resolved "https://registry.npmjs.org/fastparse/-/fastparse-1.1.2.tgz" + integrity sha512-483XLLxTVIwWK3QTrMGRqUfUpoOs/0hbQrl2oz4J0pAcm3A3bu84wxTFqGqkJzewCLdME38xJLJAxBABfQT8sQ== + +fastq@^1.6.0: + version "1.13.0" + resolved "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz" + integrity sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw== + dependencies: + reusify "^1.0.4" + +faye-websocket@^0.10.0: + version "0.10.0" + resolved "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.10.0.tgz" + integrity sha1-TkkvjQTftviQA1B/btvy1QHnxvQ= + dependencies: + websocket-driver ">=0.5.1" + +faye-websocket@~0.11.1: + version "0.11.4" + resolved "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.4.tgz" + integrity sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g== + dependencies: + websocket-driver ">=0.5.1" + +figgy-pudding@^3.4.1, figgy-pudding@^3.5.1: + version "3.5.2" + resolved "https://registry.npmjs.org/figgy-pudding/-/figgy-pudding-3.5.2.tgz" + integrity sha512-0btnI/H8f2pavGMN8w40mlSKOfTK2SVJmBfBeVIj3kNw0swwgzyRq0d5TJVOwodFmtvpPeWPN/MCcfuWF0Ezbw== + +figures@^3.0.0: + version "3.2.0" + resolved "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz" + integrity sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg== + dependencies: + escape-string-regexp "^1.0.5" + +file-loader@6.0.0: + version "6.0.0" + resolved "https://registry.npmjs.org/file-loader/-/file-loader-6.0.0.tgz" + integrity sha512-/aMOAYEFXDdjG0wytpTL5YQLfZnnTmLNjn+AIrJ/6HVnTfDqLsVKUUwkDf4I4kgex36BvjuXEn/TX9B/1ESyqQ== + dependencies: + loader-utils "^2.0.0" + schema-utils "^2.6.5" + +file-uri-to-path@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz#553a7b8446ff6f684359c445f1e37a05dacc33dd" + integrity sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw== + +fill-range@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz" + integrity sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc= + dependencies: + extend-shallow "^2.0.1" + is-number "^3.0.0" + repeat-string "^1.6.1" + to-regex-range "^2.1.0" + +fill-range@^7.0.1: + version "7.0.1" + resolved "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz" + integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== + dependencies: + to-regex-range "^5.0.1" + +finalhandler@1.1.2, finalhandler@~1.1.2: + version "1.1.2" + resolved "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz" + integrity sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA== + dependencies: + debug "2.6.9" + encodeurl "~1.0.2" + escape-html "~1.0.3" + on-finished "~2.3.0" + parseurl "~1.3.3" + statuses "~1.5.0" + unpipe "~1.0.0" + +find-cache-dir@3.3.1, find-cache-dir@^3.3.1: + version "3.3.1" + resolved "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.1.tgz" + integrity sha512-t2GDMt3oGC/v+BMwzmllWDuJF/xcDtE5j/fCGbqDD7OLuJkj0cfh1YSA5VKPvwMeLFLNDBkwOKZ2X85jGLVftQ== + dependencies: + commondir "^1.0.1" + make-dir "^3.0.2" + pkg-dir "^4.1.0" + +find-cache-dir@^2.1.0: + version "2.1.0" + resolved "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.1.0.tgz" + integrity sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ== + dependencies: + commondir "^1.0.1" + make-dir "^2.0.0" + pkg-dir "^3.0.0" + +find-up@3.0.0, find-up@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz" + integrity sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg== + dependencies: + locate-path "^3.0.0" + +find-up@^4.0.0, find-up@^4.1.0: + version "4.1.0" + resolved "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz" + integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw== + dependencies: + locate-path "^5.0.0" + path-exists "^4.0.0" + +flat@^4.1.0: + version "4.1.1" + resolved "https://registry.npmjs.org/flat/-/flat-4.1.1.tgz" + integrity sha512-FmTtBsHskrU6FJ2VxCnsDb84wu9zhmO3cUX2kGFb5tuwhfXxGciiT0oRY+cck35QmG+NmGh5eLz6lLCpWTqwpA== + dependencies: + is-buffer "~2.0.3" + +flatted@^2.0.1, flatted@^2.0.2: + version "2.0.2" + resolved "https://registry.npmjs.org/flatted/-/flatted-2.0.2.tgz" + integrity sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA== + +flush-write-stream@^1.0.0: + version "1.1.1" + resolved "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.1.1.tgz" + integrity sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w== + dependencies: + inherits "^2.0.3" + readable-stream "^2.3.6" + +follow-redirects@^1.0.0: + version "1.14.7" + resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.14.7.tgz#2004c02eb9436eee9a21446a6477debf17e81685" + integrity sha512-+hbxoLbFMbRKDwohX8GkTataGqO6Jb7jGwpAlwgy2bIz25XtRm7KEzJM76R1WiNT5SwZkX4Y75SwBolkpmE7iQ== + +for-in@^1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz" + integrity sha1-gQaNKVqBQuwKxybG4iAMMPttXoA= + +forever-agent@~0.6.1: + version "0.6.1" + resolved "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz" + integrity sha1-+8cfDEGt6zf5bFd60e1C2P2sypE= + +form-data@^2.3.1: + version "2.5.1" + resolved "https://registry.npmjs.org/form-data/-/form-data-2.5.1.tgz" + integrity sha512-m21N3WOmEEURgk6B9GLOE4RuWOFf28Lhh9qGYeNlGq4VDXUlJy2th2slBNU8Gp8EzloYZOibZJ7t5ecIrFSjVA== + dependencies: + asynckit "^0.4.0" + combined-stream "^1.0.6" + mime-types "^2.1.12" + +form-data@~2.3.2: + version "2.3.3" + resolved "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz" + integrity sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ== + dependencies: + asynckit "^0.4.0" + combined-stream "^1.0.6" + mime-types "^2.1.12" + +formidable@^1.2.0: + version "1.2.6" + resolved "https://registry.npmjs.org/formidable/-/formidable-1.2.6.tgz" + integrity sha512-KcpbcpuLNOwrEjnbpMC0gS+X8ciDoZE1kkqzat4a8vrprf+s9pKNQ/QIwWfbfs4ltgmFl3MD177SNTkve3BwGQ== + +forwarded@0.2.0: + version "0.2.0" + resolved "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz" + integrity sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow== + +fragment-cache@^0.2.1: + version "0.2.1" + resolved "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz" + integrity sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk= + dependencies: + map-cache "^0.2.2" + +fresh@0.5.2: + version "0.5.2" + resolved "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz" + integrity sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac= + +from2@^2.1.0: + version "2.3.0" + resolved "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz" + integrity sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8= + dependencies: + inherits "^2.0.1" + readable-stream "^2.0.0" + +fs-extra@4.0.2: + version "4.0.2" + resolved "https://registry.npmjs.org/fs-extra/-/fs-extra-4.0.2.tgz" + integrity sha1-+RcExT0bRh+JNFKwwwfZmXZHq2s= + dependencies: + graceful-fs "^4.1.2" + jsonfile "^4.0.0" + universalify "^0.1.0" + +fs-extra@^8.1.0: + version "8.1.0" + resolved "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz" + integrity sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g== + dependencies: + graceful-fs "^4.2.0" + jsonfile "^4.0.0" + universalify "^0.1.0" + +fs-minipass@^1.2.7: + version "1.2.7" + resolved "https://registry.npmjs.org/fs-minipass/-/fs-minipass-1.2.7.tgz" + integrity sha512-GWSSJGFy4e9GUeCcbIkED+bgAoFyj7XF1mV8rma3QW4NIqX9Kyx79N/PF61H5udOV3aY1IaMLs6pGbH71nlCTA== + dependencies: + minipass "^2.6.0" + +fs-minipass@^2.0.0: + version "2.1.0" + resolved "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz" + integrity sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg== + dependencies: + minipass "^3.0.0" + +fs-write-stream-atomic@^1.0.8: + version "1.0.10" + resolved "https://registry.npmjs.org/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz" + integrity sha1-tH31NJPvkR33VzHnCp3tAYnbQMk= + dependencies: + graceful-fs "^4.1.2" + iferr "^0.1.5" + imurmurhash "^0.1.4" + readable-stream "1 || 2" + +fs.realpath@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz" + integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= + +fsevents@^1.2.7: + version "1.2.13" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.2.13.tgz#f325cb0455592428bcf11b383370ef70e3bfcc38" + integrity sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw== + dependencies: + bindings "^1.5.0" + nan "^2.12.1" + +fsevents@~2.1.1, fsevents@~2.1.2: + version "2.1.3" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.1.3.tgz#fb738703ae8d2f9fe900c33836ddebee8b97f23e" + integrity sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ== + +fsevents@~2.3.2: + version "2.3.2" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" + integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== + +function-bind@^1.1.1: + version "1.1.1" + resolved "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz" + integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== + +genfun@^5.0.0: + version "5.0.0" + resolved "https://registry.npmjs.org/genfun/-/genfun-5.0.0.tgz" + integrity sha512-KGDOARWVga7+rnB3z9Sd2Letx515owfk0hSxHGuqjANb1M+x2bGZGqHLiozPsYMdM2OubeMni/Hpwmjq6qIUhA== + +gensync@^1.0.0-beta.1, gensync@^1.0.0-beta.2: + version "1.0.0-beta.2" + resolved "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz" + integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg== + +get-caller-file@^2.0.1, get-caller-file@^2.0.5: + version "2.0.5" + resolved "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz" + integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== + +get-intrinsic@^1.0.2, get-intrinsic@^1.1.0, get-intrinsic@^1.1.1: + version "1.1.1" + resolved "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz" + integrity sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q== + dependencies: + function-bind "^1.1.1" + has "^1.0.3" + has-symbols "^1.0.1" + +get-stream@^4.0.0, get-stream@^4.1.0: + version "4.1.0" + resolved "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz" + integrity sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w== + dependencies: + pump "^3.0.0" + +get-symbol-description@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz" + integrity sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw== + dependencies: + call-bind "^1.0.2" + get-intrinsic "^1.1.1" + +get-value@^2.0.3, get-value@^2.0.6: + version "2.0.6" + resolved "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz" + integrity sha1-3BXKHGcjh8p2vTesCjlbogQqLCg= + +getpass@^0.1.1: + version "0.1.7" + resolved "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz" + integrity sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo= + dependencies: + assert-plus "^1.0.0" + +glob-parent@^3.1.0: + version "3.1.0" + resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz" + integrity sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4= + dependencies: + is-glob "^3.1.0" + path-dirname "^1.0.0" + +glob-parent@^5.1.1, glob-parent@^5.1.2, glob-parent@~5.1.0, glob-parent@~5.1.2: + version "5.1.2" + resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz" + integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== + dependencies: + is-glob "^4.0.1" + +glob-parent@^6.0.1: + version "6.0.2" + resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz" + integrity sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A== + dependencies: + is-glob "^4.0.3" + +glob@7.1.2: + version "7.1.2" + resolved "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz" + integrity sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.0.4" + once "^1.3.0" + path-is-absolute "^1.0.0" + +glob@7.1.3: + version "7.1.3" + resolved "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz" + integrity sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.0.4" + once "^1.3.0" + path-is-absolute "^1.0.0" + +glob@7.1.6: + version "7.1.6" + resolved "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz" + integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.0.4" + once "^1.3.0" + path-is-absolute "^1.0.0" + +glob@^7.0.3, glob@^7.0.6, glob@^7.1.1, glob@^7.1.3, glob@^7.1.4, glob@^7.1.6: + version "7.2.0" + resolved "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz" + integrity sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.0.4" + once "^1.3.0" + path-is-absolute "^1.0.0" + +globals@^11.1.0: + version "11.12.0" + resolved "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz" + integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== + +globby@^11.0.1, globby@^11.0.3: + version "11.0.4" + resolved "https://registry.npmjs.org/globby/-/globby-11.0.4.tgz" + integrity sha512-9O4MVG9ioZJ08ffbcyVYyLOJLk5JQ688pJ4eMGLpdWLHq/Wr1D9BlriLQyL0E+jbkuePVZXYFj47QM/v093wHg== + dependencies: + array-union "^2.1.0" + dir-glob "^3.0.1" + fast-glob "^3.1.1" + ignore "^5.1.4" + merge2 "^1.3.0" + slash "^3.0.0" + +globby@^5.0.0: + version "5.0.0" + resolved "https://registry.npmjs.org/globby/-/globby-5.0.0.tgz" + integrity sha1-69hGZ8oNuzMLmbz8aOrCvFQ3Dg0= + dependencies: + array-union "^1.0.1" + arrify "^1.0.0" + glob "^7.0.3" + object-assign "^4.0.1" + pify "^2.0.0" + pinkie-promise "^2.0.0" + +globby@^6.1.0: + version "6.1.0" + resolved "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz" + integrity sha1-9abXDoOV4hyFj7BInWTfAkJNUGw= + dependencies: + array-union "^1.0.1" + glob "^7.0.3" + object-assign "^4.0.1" + pify "^2.0.0" + pinkie-promise "^2.0.0" + +graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.4: + version "4.2.8" + resolved "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.8.tgz" + integrity sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg== + +graphlib@^2.1.8: + version "2.1.8" + resolved "https://registry.npmjs.org/graphlib/-/graphlib-2.1.8.tgz" + integrity sha512-jcLLfkpoVGmH7/InMC/1hIvOPSUh38oJtGhvrOFGzioE1DZ+0YW16RgmOJhHiuWTvGiJQ9Z1Ik43JvkRPRvE+A== + dependencies: + lodash "^4.17.15" + +growl@1.10.5: + version "1.10.5" + resolved "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz" + integrity sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA== + +hammerjs@2.0.8: + version "2.0.8" + resolved "https://registry.npmjs.org/hammerjs/-/hammerjs-2.0.8.tgz" + integrity sha1-BO93hiz/K7edMPdpIJWTAiK/YPE= + +handle-thing@^2.0.0: + version "2.0.1" + resolved "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.1.tgz" + integrity sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg== + +har-schema@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz" + integrity sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI= + +har-validator@~5.1.3: + version "5.1.5" + resolved "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz" + integrity sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w== + dependencies: + ajv "^6.12.3" + har-schema "^2.0.0" + +has-ansi@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz" + integrity sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE= + dependencies: + ansi-regex "^2.0.0" + +has-bigints@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.1.tgz" + integrity sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA== + +has-binary2@~1.0.2: + version "1.0.3" + resolved "https://registry.npmjs.org/has-binary2/-/has-binary2-1.0.3.tgz" + integrity sha512-G1LWKhDSvhGeAQ8mPVQlqNcOB2sJdwATtZKl2pDKKHfpf/rYj24lkinxf69blJbnsvtqqNU+L3SL50vzZhXOnw== + dependencies: + isarray "2.0.1" + +has-cors@1.1.0: + version "1.1.0" + resolved "https://registry.npmjs.org/has-cors/-/has-cors-1.1.0.tgz" + integrity sha1-XkdHk/fqmEPRu5nCPu9J/xJv/zk= + +has-flag@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz" + integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0= + +has-flag@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz" + integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== + +has-symbols@^1.0.0, has-symbols@^1.0.1, has-symbols@^1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz" + integrity sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw== + +has-tostringtag@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz" + integrity sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ== + dependencies: + has-symbols "^1.0.2" + +has-value@^0.3.1: + version "0.3.1" + resolved "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz" + integrity sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8= + dependencies: + get-value "^2.0.3" + has-values "^0.1.4" + isobject "^2.0.0" + +has-value@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz" + integrity sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc= + dependencies: + get-value "^2.0.6" + has-values "^1.0.0" + isobject "^3.0.0" + +has-values@^0.1.4: + version "0.1.4" + resolved "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz" + integrity sha1-bWHeldkd/Km5oCCJrThL/49it3E= + +has-values@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz" + integrity sha1-lbC2P+whRmGab+V/51Yo1aOe/k8= + dependencies: + is-number "^3.0.0" + kind-of "^4.0.0" + +has@^1.0.0, has@^1.0.3: + version "1.0.3" + resolved "https://registry.npmjs.org/has/-/has-1.0.3.tgz" + integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== + dependencies: + function-bind "^1.1.1" + +hash-base@^3.0.0: + version "3.1.0" + resolved "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz" + integrity sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA== + dependencies: + inherits "^2.0.4" + readable-stream "^3.6.0" + safe-buffer "^5.2.0" + +hash.js@^1.0.0, hash.js@^1.0.3: + version "1.1.7" + resolved "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz" + integrity sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA== + dependencies: + inherits "^2.0.3" + minimalistic-assert "^1.0.1" + +he@1.2.0: + version "1.2.0" + resolved "https://registry.npmjs.org/he/-/he-1.2.0.tgz" + integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw== + +hex-color-regex@^1.1.0: + version "1.1.0" + resolved "https://registry.npmjs.org/hex-color-regex/-/hex-color-regex-1.1.0.tgz" + integrity sha512-l9sfDFsuqtOqKDsQdqrMRk0U85RZc0RtOR9yPI7mRVOa4FsR/BVnZ0shmQRM96Ji99kYZP/7hn1cedc1+ApsTQ== + +hmac-drbg@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz" + integrity sha1-0nRXAQJabHdabFRXk+1QL8DGSaE= + dependencies: + hash.js "^1.0.3" + minimalistic-assert "^1.0.0" + minimalistic-crypto-utils "^1.0.1" + +homedir-polyfill@^1.0.1: + version "1.0.3" + resolved "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz" + integrity sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA== + dependencies: + parse-passwd "^1.0.0" + +hosted-git-info@^2.1.4, hosted-git-info@^2.7.1: + version "2.8.9" + resolved "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz" + integrity sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw== + +hosted-git-info@^3.0.2: + version "3.0.8" + resolved "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-3.0.8.tgz" + integrity sha512-aXpmwoOhRBrw6X3j0h5RloK4x1OzsxMPyxqIHyNfSe2pypkVTZFpEiRoSipPEPlMrh0HW/XsjkJ5WgnCirpNUw== + dependencies: + lru-cache "^6.0.0" + +hpack.js@^2.1.6: + version "2.1.6" + resolved "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz" + integrity sha1-h3dMCUnlE/QuhFdbPEVoH63ioLI= + dependencies: + inherits "^2.0.1" + obuf "^1.0.0" + readable-stream "^2.0.1" + wbuf "^1.1.0" + +hsl-regex@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/hsl-regex/-/hsl-regex-1.0.0.tgz" + integrity sha1-1JMwx4ntgZ4nakwNJy3/owsY/m4= + +hsla-regex@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/hsla-regex/-/hsla-regex-1.0.0.tgz" + integrity sha1-wc56MWjIxmFAM6S194d/OyJfnDg= + +html-entities@^1.3.1: + version "1.4.0" + resolved "https://registry.npmjs.org/html-entities/-/html-entities-1.4.0.tgz" + integrity sha512-8nxjcBcd8wovbeKx7h3wTji4e6+rhaVuPNpMqwWgnHh+N9ToqsCs6XztWRBPQ+UtzsoMAdKZtUENoVzU/EMtZA== + +html-escaper@^2.0.0: + version "2.0.2" + resolved "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz" + integrity sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg== + +http-cache-semantics@^3.8.1: + version "3.8.1" + resolved "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-3.8.1.tgz" + integrity sha512-5ai2iksyV8ZXmnZhHH4rWPoxxistEexSi5936zIQ1bnNTW5VnA85B6P/VpXiRM017IgRvb2kKo1a//y+0wSp3w== + +http-deceiver@^1.2.7: + version "1.2.7" + resolved "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz" + integrity sha1-+nFolEq5pRnTN8sL7HKE3D5yPYc= + +http-errors@1.7.2, http-errors@~1.7.2: + version "1.7.2" + resolved "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz" + integrity sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg== + dependencies: + depd "~1.1.2" + inherits "2.0.3" + setprototypeof "1.1.1" + statuses ">= 1.5.0 < 2" + toidentifier "1.0.0" + +http-errors@~1.6.2: + version "1.6.3" + resolved "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz" + integrity sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0= + dependencies: + depd "~1.1.2" + inherits "2.0.3" + setprototypeof "1.1.0" + statuses ">= 1.4.0 < 2" + +http-proxy-agent@^2.1.0: + version "2.1.0" + resolved "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-2.1.0.tgz" + integrity sha512-qwHbBLV7WviBl0rQsOzH6o5lwyOIvwp/BdFnvVxXORldu5TmjFfjzBcWUWS5kWAZhmv+JtiDhSuQCp4sBfbIgg== + dependencies: + agent-base "4" + debug "3.1.0" + +http-proxy-middleware@0.19.1: + version "0.19.1" + resolved "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-0.19.1.tgz" + integrity sha512-yHYTgWMQO8VvwNS22eLLloAkvungsKdKTLO8AJlftYIKNfJr3GK3zK0ZCfzDDGUBttdGc8xFy1mCitvNKQtC3Q== + dependencies: + http-proxy "^1.17.0" + is-glob "^4.0.0" + lodash "^4.17.11" + micromatch "^3.1.10" + +http-proxy@^1.17.0, http-proxy@^1.18.1: + version "1.18.1" + resolved "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz" + integrity sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ== + dependencies: + eventemitter3 "^4.0.0" + follow-redirects "^1.0.0" + requires-port "^1.0.0" + +http-signature@~1.2.0: + version "1.2.0" + resolved "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz" + integrity sha1-muzZJRFHcvPZW2WmCruPfBj7rOE= + dependencies: + assert-plus "^1.0.0" + jsprim "^1.2.2" + sshpk "^1.7.0" + +https-browserify@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz" + integrity sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM= + +https-proxy-agent@^2.2.1, https-proxy-agent@^2.2.3: + version "2.2.4" + resolved "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-2.2.4.tgz" + integrity sha512-OmvfoQ53WLjtA9HeYP9RNrWMJzzAz1JGaSFr1nijg0PVR1JaD/xbJq1mdEIIlxGpXp9eSe/O2LgU9DJmTPd0Eg== + dependencies: + agent-base "^4.3.0" + debug "^3.1.0" + +humanize-ms@^1.2.1: + version "1.2.1" + resolved "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz" + integrity sha1-xG4xWaKT9riW2ikxbYtv6Lt5u+0= + dependencies: + ms "^2.0.0" + +iconv-lite@0.4.24, iconv-lite@^0.4.24: + version "0.4.24" + resolved "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz" + integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== + dependencies: + safer-buffer ">= 2.1.2 < 3" + +iconv-lite@^0.5.1: + version "0.5.2" + resolved "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.5.2.tgz" + integrity sha512-kERHXvpSaB4aU3eANwidg79K8FlrN77m8G9V+0vOR3HYaRifrlwMEpT7ZBJqLSEIHnEgJTHcWK82wwLwwKwtag== + dependencies: + safer-buffer ">= 2.1.2 < 3" + +iconv-lite@^0.6.2: + version "0.6.3" + resolved "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz" + integrity sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw== + dependencies: + safer-buffer ">= 2.1.2 < 3.0.0" + +icss-utils@^4.0.0, icss-utils@^4.1.1: + version "4.1.1" + resolved "https://registry.npmjs.org/icss-utils/-/icss-utils-4.1.1.tgz" + integrity sha512-4aFq7wvWyMHKgxsH8QQtGpvbASCf+eM3wPRLI6R+MgAnTCZ6STYsRvttLvRWK0Nfif5piF394St3HeJDaljGPA== + dependencies: + postcss "^7.0.14" + +ieee754@^1.1.13, ieee754@^1.1.4: + version "1.2.1" + resolved "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz" + integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== + +iferr@^0.1.5: + version "0.1.5" + resolved "https://registry.npmjs.org/iferr/-/iferr-0.1.5.tgz" + integrity sha1-xg7taebY/bazEEofy8ocGS3FtQE= + +ignore-walk@^3.0.1: + version "3.0.4" + resolved "https://registry.npmjs.org/ignore-walk/-/ignore-walk-3.0.4.tgz" + integrity sha512-PY6Ii8o1jMRA1z4F2hRkH/xN59ox43DavKvD3oDpfurRlOJyAHpifIwpbdv1n4jt4ov0jSpw3kQ4GhJnpBL6WQ== + dependencies: + minimatch "^3.0.4" + +ignore@^5.1.4: + version "5.1.9" + resolved "https://registry.npmjs.org/ignore/-/ignore-5.1.9.tgz" + integrity sha512-2zeMQpbKz5dhZ9IwL0gbxSW5w0NK/MSAMtNuhgIHEPmaU3vPdKPL0UdvUCXs5SS4JAwsBxysK5sFMW8ocFiVjQ== + +image-size@~0.5.0: + version "0.5.5" + resolved "https://registry.npmjs.org/image-size/-/image-size-0.5.5.tgz" + integrity sha1-Cd/Uq50g4p6xw+gLiZA3jfnjy5w= + +immediate@~3.0.5: + version "3.0.6" + resolved "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz" + integrity sha1-nbHb0Pr43m++D13V5Wu2BigN5ps= + +import-cwd@^2.0.0: + version "2.1.0" + resolved "https://registry.npmjs.org/import-cwd/-/import-cwd-2.1.0.tgz" + integrity sha1-qmzzbnInYShcs3HsZRn1PiQ1sKk= + dependencies: + import-from "^2.1.0" + +import-fresh@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/import-fresh/-/import-fresh-2.0.0.tgz" + integrity sha1-2BNVwVYS04bGH53dOSLUMEgipUY= + dependencies: + caller-path "^2.0.0" + resolve-from "^3.0.0" + +import-from@^2.1.0: + version "2.1.0" + resolved "https://registry.npmjs.org/import-from/-/import-from-2.1.0.tgz" + integrity sha1-M1238qev/VOqpHHUuAId7ja387E= + dependencies: + resolve-from "^3.0.0" + +import-local@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/import-local/-/import-local-2.0.0.tgz" + integrity sha512-b6s04m3O+s3CGSbqDIyP4R6aAwAeYlVq9+WUWep6iHa8ETRf9yei1U48C5MmfJmV9AiLYYBKPMq/W+/WRpQmCQ== + dependencies: + pkg-dir "^3.0.0" + resolve-cwd "^2.0.0" + +imurmurhash@^0.1.4: + version "0.1.4" + resolved "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz" + integrity sha1-khi5srkoojixPcT7a21XbyMUU+o= + +indent-string@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz" + integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg== + +indexes-of@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/indexes-of/-/indexes-of-1.0.1.tgz" + integrity sha1-8w9xbI4r00bHtn0985FVZqfAVgc= + +indexof@0.0.1: + version "0.0.1" + resolved "https://registry.npmjs.org/indexof/-/indexof-0.0.1.tgz" + integrity sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10= + +infer-owner@^1.0.3, infer-owner@^1.0.4: + version "1.0.4" + resolved "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz" + integrity sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A== + +inflight@^1.0.4: + version "1.0.6" + resolved "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz" + integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= + dependencies: + once "^1.3.0" + wrappy "1" + +inherits@2, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.1, inherits@~2.0.3: + version "2.0.4" + resolved "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz" + integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== + +inherits@2.0.1: + version "2.0.1" + resolved "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz" + integrity sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE= + +inherits@2.0.3: + version "2.0.3" + resolved "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz" + integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4= + +ini@1.3.6, ini@^1.3.4: + version "1.3.6" + resolved "https://registry.npmjs.org/ini/-/ini-1.3.6.tgz" + integrity sha512-IZUoxEjNjubzrmvzZU4lKP7OnYmX72XRl3sqkfJhBKweKi5rnGi5+IUdlj/H1M+Ip5JQ1WzaDMOBRY90Ajc5jg== + +inquirer@7.3.3: + version "7.3.3" + resolved "https://registry.npmjs.org/inquirer/-/inquirer-7.3.3.tgz" + integrity sha512-JG3eIAj5V9CwcGvuOmoo6LB9kbAYT8HXffUl6memuszlwDC/qvFAJw49XJ5NROSFNPxp3iQg1GqkFhaY/CR0IA== + dependencies: + ansi-escapes "^4.2.1" + chalk "^4.1.0" + cli-cursor "^3.1.0" + cli-width "^3.0.0" + external-editor "^3.0.3" + figures "^3.0.0" + lodash "^4.17.19" + mute-stream "0.0.8" + run-async "^2.4.0" + rxjs "^6.6.0" + string-width "^4.1.0" + strip-ansi "^6.0.0" + through "^2.3.6" + +internal-ip@^4.3.0: + version "4.3.0" + resolved "https://registry.npmjs.org/internal-ip/-/internal-ip-4.3.0.tgz" + integrity sha512-S1zBo1D6zcsyuC6PMmY5+55YMILQ9av8lotMx447Bq6SAgo/sDK6y6uUKmuYhW7eacnIhFfsPmCNYdDzsnnDCg== + dependencies: + default-gateway "^4.2.0" + ipaddr.js "^1.9.0" + +internal-slot@^1.0.3: + version "1.0.3" + resolved "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz" + integrity sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA== + dependencies: + get-intrinsic "^1.1.0" + has "^1.0.3" + side-channel "^1.0.4" + +invariant@^2.2.2: + version "2.2.4" + resolved "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz" + integrity sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA== + dependencies: + loose-envify "^1.0.0" + +ip-regex@^2.1.0: + version "2.1.0" + resolved "https://registry.npmjs.org/ip-regex/-/ip-regex-2.1.0.tgz" + integrity sha1-+ni/XS5pE8kRzp+BnuUUa7bYROk= + +ip@1.1.5, ip@^1.1.0, ip@^1.1.5: + version "1.1.5" + resolved "https://registry.npmjs.org/ip/-/ip-1.1.5.tgz" + integrity sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo= + +ipaddr.js@1.9.1, ipaddr.js@^1.9.0: + version "1.9.1" + resolved "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz" + integrity sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g== + +is-absolute-url@^2.0.0: + version "2.1.0" + resolved "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-2.1.0.tgz" + integrity sha1-UFMN+4T8yap9vnhS6Do3uTufKqY= + +is-absolute-url@^3.0.3: + version "3.0.3" + resolved "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-3.0.3.tgz" + integrity sha512-opmNIX7uFnS96NtPmhWQgQx6/NYFgsUXYMllcfzwWKUMwfo8kku1TvE6hkNcH+Q1ts5cMVrsY7j0bxXQDciu9Q== + +is-accessor-descriptor@^0.1.6: + version "0.1.6" + resolved "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz" + integrity sha1-qeEss66Nh2cn7u84Q/igiXtcmNY= + dependencies: + kind-of "^3.0.2" + +is-accessor-descriptor@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz" + integrity sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ== + dependencies: + kind-of "^6.0.0" + +is-arguments@^1.0.4: + version "1.1.1" + resolved "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz" + integrity sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA== + dependencies: + call-bind "^1.0.2" + has-tostringtag "^1.0.0" + +is-arrayish@^0.2.1: + version "0.2.1" + resolved "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz" + integrity sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0= + +is-arrayish@^0.3.1: + version "0.3.2" + resolved "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz" + integrity sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ== + +is-bigint@^1.0.1: + version "1.0.4" + resolved "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz" + integrity sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg== + dependencies: + has-bigints "^1.0.1" + +is-binary-path@^1.0.0: + version "1.0.1" + resolved "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz" + integrity sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg= + dependencies: + binary-extensions "^1.0.0" + +is-binary-path@~2.1.0: + version "2.1.0" + resolved "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz" + integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== + dependencies: + binary-extensions "^2.0.0" + +is-boolean-object@^1.1.0: + version "1.1.2" + resolved "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz" + integrity sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA== + dependencies: + call-bind "^1.0.2" + has-tostringtag "^1.0.0" + +is-buffer@^1.1.5: + version "1.1.6" + resolved "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz" + integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w== + +is-buffer@~2.0.3: + version "2.0.5" + resolved "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz" + integrity sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ== + +is-callable@^1.1.4, is-callable@^1.2.4: + version "1.2.4" + resolved "https://registry.npmjs.org/is-callable/-/is-callable-1.2.4.tgz" + integrity sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w== + +is-color-stop@^1.0.0: + version "1.1.0" + resolved "https://registry.npmjs.org/is-color-stop/-/is-color-stop-1.1.0.tgz" + integrity sha1-z/9HGu5N1cnhWFmPvhKWe1za00U= + dependencies: + css-color-names "^0.0.4" + hex-color-regex "^1.1.0" + hsl-regex "^1.0.0" + hsla-regex "^1.0.0" + rgb-regex "^1.0.1" + rgba-regex "^1.0.0" + +is-core-module@^2.2.0: + version "2.8.0" + resolved "https://registry.npmjs.org/is-core-module/-/is-core-module-2.8.0.tgz" + integrity sha512-vd15qHsaqrRL7dtH6QNuy0ndJmRDrS9HAM1CAiSifNUFv4x1a0CCVsj18hJ1mShxIG6T2i1sO78MkP56r0nYRw== + dependencies: + has "^1.0.3" + +is-data-descriptor@^0.1.4: + version "0.1.4" + resolved "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz" + integrity sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y= + dependencies: + kind-of "^3.0.2" + +is-data-descriptor@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz" + integrity sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ== + dependencies: + kind-of "^6.0.0" + +is-date-object@^1.0.1: + version "1.0.5" + resolved "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz" + integrity sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ== + dependencies: + has-tostringtag "^1.0.0" + +is-descriptor@^0.1.0: + version "0.1.6" + resolved "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz" + integrity sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg== + dependencies: + is-accessor-descriptor "^0.1.6" + is-data-descriptor "^0.1.4" + kind-of "^5.0.0" + +is-descriptor@^1.0.0, is-descriptor@^1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz" + integrity sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg== + dependencies: + is-accessor-descriptor "^1.0.0" + is-data-descriptor "^1.0.0" + kind-of "^6.0.2" + +is-directory@^0.3.1: + version "0.3.1" + resolved "https://registry.npmjs.org/is-directory/-/is-directory-0.3.1.tgz" + integrity sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE= + +is-docker@^2.0.0: + version "2.2.1" + resolved "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz" + integrity sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ== + +is-extendable@^0.1.0, is-extendable@^0.1.1: + version "0.1.1" + resolved "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz" + integrity sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik= + +is-extendable@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz" + integrity sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA== + dependencies: + is-plain-object "^2.0.4" + +is-extglob@^2.1.0, is-extglob@^2.1.1: + version "2.1.1" + resolved "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz" + integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= + +is-fullwidth-code-point@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz" + integrity sha1-o7MKXE8ZkYMWeqq5O+764937ZU8= + +is-fullwidth-code-point@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz" + integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== + +is-glob@^3.1.0: + version "3.1.0" + resolved "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz" + integrity sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo= + dependencies: + is-extglob "^2.1.0" + +is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3, is-glob@~4.0.1: + version "4.0.3" + resolved "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz" + integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== + dependencies: + is-extglob "^2.1.1" + +is-interactive@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz" + integrity sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w== + +is-negative-zero@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.2.tgz#7bf6f03a28003b8b3965de3ac26f664d765f3150" + integrity sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA== + +is-number-object@^1.0.4: + version "1.0.6" + resolved "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.6.tgz" + integrity sha512-bEVOqiRcvo3zO1+G2lVMy+gkkEm9Yh7cDMRusKKu5ZJKPUYSJwICTKZrNKHA2EbSP0Tu0+6B/emsYNHZyn6K8g== + dependencies: + has-tostringtag "^1.0.0" + +is-number@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz" + integrity sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU= + dependencies: + kind-of "^3.0.2" + +is-number@^7.0.0: + version "7.0.0" + resolved "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz" + integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== + +is-obj@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz" + integrity sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w== + +is-path-cwd@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-1.0.0.tgz" + integrity sha1-0iXsIxMuie3Tj9p2dHLmLmXxEG0= + +is-path-cwd@^2.0.0: + version "2.2.0" + resolved "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-2.2.0.tgz" + integrity sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ== + +is-path-in-cwd@^1.0.0: + version "1.0.1" + resolved "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-1.0.1.tgz" + integrity sha512-FjV1RTW48E7CWM7eE/J2NJvAEEVektecDBVBE5Hh3nM1Jd0kvhHtX68Pr3xsDf857xt3Y4AkwVULK1Vku62aaQ== + dependencies: + is-path-inside "^1.0.0" + +is-path-in-cwd@^2.0.0: + version "2.1.0" + resolved "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-2.1.0.tgz" + integrity sha512-rNocXHgipO+rvnP6dk3zI20RpOtrAM/kzbB258Uw5BWr3TpXi861yzjo16Dn4hUox07iw5AyeMLHWsujkjzvRQ== + dependencies: + is-path-inside "^2.1.0" + +is-path-inside@^1.0.0: + version "1.0.1" + resolved "https://registry.npmjs.org/is-path-inside/-/is-path-inside-1.0.1.tgz" + integrity sha1-jvW33lBDej/cprToZe96pVy0gDY= + dependencies: + path-is-inside "^1.0.1" + +is-path-inside@^2.1.0: + version "2.1.0" + resolved "https://registry.npmjs.org/is-path-inside/-/is-path-inside-2.1.0.tgz" + integrity sha512-wiyhTzfDWsvwAW53OBWF5zuvaOGlZ6PwYxAbPVDhpm+gM09xKQGjBq/8uYN12aDvMxnAnq3dxTyoSoRNmg5YFg== + dependencies: + path-is-inside "^1.0.2" + +is-plain-obj@^1.0.0: + version "1.1.0" + resolved "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz" + integrity sha1-caUMhCnfync8kqOQpKA7OfzVHT4= + +is-plain-obj@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.0.0.tgz" + integrity sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw== + +is-plain-object@^2.0.3, is-plain-object@^2.0.4: + version "2.0.4" + resolved "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz" + integrity sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og== + dependencies: + isobject "^3.0.1" + +is-regex@^1.0.4, is-regex@^1.1.4: + version "1.1.4" + resolved "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz" + integrity sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg== + dependencies: + call-bind "^1.0.2" + has-tostringtag "^1.0.0" + +is-resolvable@^1.0.0: + version "1.1.0" + resolved "https://registry.npmjs.org/is-resolvable/-/is-resolvable-1.1.0.tgz" + integrity sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg== + +is-shared-array-buffer@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.1.tgz" + integrity sha512-IU0NmyknYZN0rChcKhRO1X8LYz5Isj/Fsqh8NJOSf+N/hCOTwy29F32Ik7a+QszE63IdvmwdTPDd6cZ5pg4cwA== + +is-stream@^1.1.0: + version "1.1.0" + resolved "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz" + integrity sha1-EtSj3U5o4Lec6428hBc66A2RykQ= + +is-string@^1.0.5, is-string@^1.0.7: + version "1.0.7" + resolved "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz" + integrity sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg== + dependencies: + has-tostringtag "^1.0.0" + +is-symbol@^1.0.2, is-symbol@^1.0.3: + version "1.0.4" + resolved "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz" + integrity sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg== + dependencies: + has-symbols "^1.0.2" + +is-typedarray@^1.0.0, is-typedarray@~1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz" + integrity sha1-5HnICFjfDBsR3dppQPlgEfzaSpo= + +is-ua-webview@^1.0.0: + version "1.0.5" + resolved "https://registry.npmjs.org/is-ua-webview/-/is-ua-webview-1.0.5.tgz" + integrity sha512-CfaCxjFTU3xUluvcKg0+3j5uXeyneANFnC9ynSCTFA06nFt1okFBXpkKVxqxtFAKcbsFl+vrOQ7g6hlaDIQu8A== + +is-unicode-supported@^0.1.0: + version "0.1.0" + resolved "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz" + integrity sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw== + +is-weakref@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-weakref/-/is-weakref-1.0.2.tgz#9529f383a9338205e89765e0392efc2f100f06f2" + integrity sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ== + dependencies: + call-bind "^1.0.2" + +is-what@^3.12.0: + version "3.14.1" + resolved "https://registry.npmjs.org/is-what/-/is-what-3.14.1.tgz" + integrity sha512-sNxgpk9793nzSs7bA6JQJGeIuRBQhAaNGG77kzYQgMkrID+lS6SlK07K5LaptscDlSaIgH+GPFzf+d75FVxozA== + +is-windows@^1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz" + integrity sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA== + +is-wsl@^1.1.0: + version "1.1.0" + resolved "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz" + integrity sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0= + +is-wsl@^2.1.1: + version "2.2.0" + resolved "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz" + integrity sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww== + dependencies: + is-docker "^2.0.0" + +isarray@1.0.0, isarray@^1.0.0, isarray@~1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz" + integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE= + +isarray@2.0.1: + version "2.0.1" + resolved "https://registry.npmjs.org/isarray/-/isarray-2.0.1.tgz" + integrity sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4= + +isbinaryfile@^4.0.6: + version "4.0.8" + resolved "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-4.0.8.tgz" + integrity sha512-53h6XFniq77YdW+spoRrebh0mnmTxRPTlcuIArO57lmMdq4uBKFKaeTjnb92oYWrSn/LVL+LT+Hap2tFQj8V+w== + +isexe@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz" + integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= + +iso-639-1@^2.1.11: + version "2.1.12" + resolved "https://registry.yarnpkg.com/iso-639-1/-/iso-639-1-2.1.12.tgz#3893075f50506e98e6243398a5d83ea0f6355524" + integrity sha512-XuThg6XyPBj4RpXtsLbgbJPww6cQeSoiVQWJprM72f1ZTEV/1oeTMzU+dUY+SMPkHfIM5CfaliR4veTVtdXRKg== + +isobject@^2.0.0: + version "2.1.0" + resolved "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz" + integrity sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk= + dependencies: + isarray "1.0.0" + +isobject@^3.0.0, isobject@^3.0.1: + version "3.0.1" + resolved "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz" + integrity sha1-TkMekrEalzFjaqH5yNHMvP2reN8= + +isstream@~0.1.2: + version "0.1.2" + resolved "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz" + integrity sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo= + +istanbul-lib-coverage@^2.0.5: + version "2.0.5" + resolved "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.5.tgz" + integrity sha512-8aXznuEPCJvGnMSRft4udDRDtb1V3pkQkMMI5LI+6HuQz5oQ4J2UFn1H82raA3qJtyOLkkwVqICBQkjnGtn5mA== + +istanbul-lib-coverage@^3.0.0: + version "3.2.0" + resolved "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz" + integrity sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw== + +istanbul-lib-instrument@^4.0.1: + version "4.0.3" + resolved "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-4.0.3.tgz" + integrity sha512-BXgQl9kf4WTCPCCpmFGoJkz/+uhvm7h7PFKUYxh7qarQd3ER33vHG//qaE8eN25l07YqZPpHXU9I09l/RD5aGQ== + dependencies: + "@babel/core" "^7.7.5" + "@istanbuljs/schema" "^0.1.2" + istanbul-lib-coverage "^3.0.0" + semver "^6.3.0" + +istanbul-lib-report@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz" + integrity sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw== + dependencies: + istanbul-lib-coverage "^3.0.0" + make-dir "^3.0.0" + supports-color "^7.1.0" + +istanbul-lib-source-maps@^3.0.6: + version "3.0.6" + resolved "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-3.0.6.tgz" + integrity sha512-R47KzMtDJH6X4/YW9XTx+jrLnZnscW4VpNN+1PViSYTejLVPWv7oov+Duf8YQSPyVRUvueQqz1TcsC6mooZTXw== + dependencies: + debug "^4.1.1" + istanbul-lib-coverage "^2.0.5" + make-dir "^2.1.0" + rimraf "^2.6.3" + source-map "^0.6.1" + +istanbul-reports@^3.0.2: + version "3.1.1" + resolved "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.1.tgz" + integrity sha512-q1kvhAXWSsXfMjCdNHNPKZZv94OlspKnoGv+R9RGbnqOOQ0VbNfLFgQDVgi7hHenKsndGq3/o0OBdzDXthWcNw== + dependencies: + html-escaper "^2.0.0" + istanbul-lib-report "^3.0.0" + +jasmine-core@^3.5.0: + version "3.10.1" + resolved "https://registry.npmjs.org/jasmine-core/-/jasmine-core-3.10.1.tgz" + integrity sha512-ooZWSDVAdh79Rrj4/nnfklL3NQVra0BcuhcuWoAwwi+znLDoUeH87AFfeX8s+YeYi6xlv5nveRyaA1v7CintfA== + +jasmine-core@~2.8.0: + version "2.8.0" + resolved "https://registry.npmjs.org/jasmine-core/-/jasmine-core-2.8.0.tgz" + integrity sha1-vMl5rh+f0FcB5F5S5l06XWPxok4= + +jasmine-core@~3.5.0: + version "3.5.0" + resolved "https://registry.npmjs.org/jasmine-core/-/jasmine-core-3.5.0.tgz" + integrity sha512-nCeAiw37MIMA9w9IXso7bRaLl+c/ef3wnxsoSAlYrzS+Ot0zTG6nU8G/cIfGkqpkjX2wNaIW9RFG0TwIFnG6bA== + +jasmine-spec-reporter@~5.0.0: + version "5.0.2" + resolved "https://registry.npmjs.org/jasmine-spec-reporter/-/jasmine-spec-reporter-5.0.2.tgz" + integrity sha512-6gP1LbVgJ+d7PKksQBc2H0oDGNRQI3gKUsWlswKaQ2fif9X5gzhQcgM5+kiJGCQVurOG09jqNhk7payggyp5+g== + dependencies: + colors "1.4.0" + +jasmine@2.8.0: + version "2.8.0" + resolved "https://registry.npmjs.org/jasmine/-/jasmine-2.8.0.tgz" + integrity sha1-awicChFXax8W3xG4AUbZHU6Lij4= + dependencies: + exit "^0.1.2" + glob "^7.0.6" + jasmine-core "~2.8.0" + +jasminewd2@^2.1.0: + version "2.2.0" + resolved "https://registry.npmjs.org/jasminewd2/-/jasminewd2-2.2.0.tgz" + integrity sha1-43zwsX8ZnM4jvqcbIDk5Uka07E4= + +jest-worker@26.0.0, jest-worker@^26.0.0: + version "26.0.0" + resolved "https://registry.npmjs.org/jest-worker/-/jest-worker-26.0.0.tgz" + integrity sha512-pPaYa2+JnwmiZjK9x7p9BoZht+47ecFCDFA/CJxspHzeDvQcfVBLWzCiWyo+EGrSiQMWZtCFo9iSvMZnAAo8vw== + dependencies: + merge-stream "^2.0.0" + supports-color "^7.0.0" + +jexl@^2.3.0: + version "2.3.0" + resolved "https://registry.npmjs.org/jexl/-/jexl-2.3.0.tgz" + integrity sha512-ecqln4kTWNkMwbFvTukOMDq1jy1GcPzvshhMp/s4pxU86xdLDq7HbDRa87DfMfbSAOS8V6EwvCdfs0S+w/iycA== + dependencies: + "@babel/runtime" "^7.10.2" + +js-sha256@0.9.0: + version "0.9.0" + resolved "https://registry.npmjs.org/js-sha256/-/js-sha256-0.9.0.tgz" + integrity sha512-sga3MHh9sgQN2+pJ9VYZ+1LPwXOxuBJBA5nrR5/ofPfuiJBE2hnjsaN8se8JznOmGLN2p49Pe5U/ttafcs/apA== + +"js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz" + integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== + +js-yaml@3.13.1: + version "3.13.1" + resolved "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz" + integrity sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw== + dependencies: + argparse "^1.0.7" + esprima "^4.0.0" + +js-yaml@^3.13.1: + version "3.14.1" + resolved "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz" + integrity sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g== + dependencies: + argparse "^1.0.7" + esprima "^4.0.0" + +jsbn@~0.1.0: + version "0.1.1" + resolved "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz" + integrity sha1-peZUwuWi3rXyAdls77yoDA7y9RM= + +jsesc@^2.5.1: + version "2.5.2" + resolved "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz" + integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA== + +jsesc@~0.5.0: + version "0.5.0" + resolved "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz" + integrity sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0= + +json-parse-better-errors@^1.0.0, json-parse-better-errors@^1.0.1, json-parse-better-errors@^1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz" + integrity sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw== + +json-parse-even-better-errors@^2.3.0: + version "2.3.1" + resolved "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz" + integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w== + +json-refs@^3.0.4: + version "3.0.15" + resolved "https://registry.npmjs.org/json-refs/-/json-refs-3.0.15.tgz" + integrity sha512-0vOQd9eLNBL18EGl5yYaO44GhixmImes2wiYn9Z3sag3QnehWrYWlB9AFtMxCL2Bj3fyxgDYkxGFEU/chlYssw== + dependencies: + commander "~4.1.1" + graphlib "^2.1.8" + js-yaml "^3.13.1" + lodash "^4.17.15" + native-promise-only "^0.8.1" + path-loader "^1.0.10" + slash "^3.0.0" + uri-js "^4.2.2" + +json-schema-ref-parser@7.1.3: + version "7.1.3" + resolved "https://registry.npmjs.org/json-schema-ref-parser/-/json-schema-ref-parser-7.1.3.tgz" + integrity sha512-/Lmyl0PW27dOmCO03PI339+1gs4Z2PlqIyUgzIOtoRp08zkkMCB30TRbdppbPO7WWzZX0uT98HqkDiZSujkmbA== + dependencies: + call-me-maybe "^1.0.1" + js-yaml "^3.13.1" + ono "^6.0.0" + +json-schema-traverse@^0.4.1: + version "0.4.1" + resolved "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz" + integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== + +json-schema-traverse@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz" + integrity sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug== + +json-schema@0.4.0: + version "0.4.0" + resolved "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz" + integrity sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA== + +json-stringify-safe@~5.0.1: + version "5.0.1" + resolved "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz" + integrity sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus= + +json3@^3.3.2: + version "3.3.3" + resolved "https://registry.npmjs.org/json3/-/json3-3.3.3.tgz" + integrity sha512-c7/8mbUsKigAbLkD5B010BK4D9LZm7A1pNItkEwiUZRpIN66exu/e7YQWysGun+TRKaJp8MhemM+VkfWv42aCA== + +json5@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz" + integrity sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow== + dependencies: + minimist "^1.2.0" + +json5@^2.1.0, json5@^2.1.2: + version "2.2.0" + resolved "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz" + integrity sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA== + dependencies: + minimist "^1.2.5" + +jsonc-parser@2.3.0: + version "2.3.0" + resolved "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-2.3.0.tgz" + integrity sha512-b0EBt8SWFNnixVdvoR2ZtEGa9ZqLhbJnOjezn+WP+8kspFm+PFYDN8Z4Bc7pRlDjvuVcADSUkroIuTWWn/YiIA== + +jsonc-parser@3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.0.0.tgz" + integrity sha512-fQzRfAbIBnR0IQvftw9FJveWiHp72Fg20giDrHz6TdfB12UH/uue0D3hm57UB5KgAVuniLMCaS8P1IMj9NR7cA== + +jsonfile@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz" + integrity sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss= + optionalDependencies: + graceful-fs "^4.1.6" + +jsonparse@^1.2.0: + version "1.3.1" + resolved "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz" + integrity sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA= + +jsprim@^1.2.2: + version "1.4.2" + resolved "https://registry.npmjs.org/jsprim/-/jsprim-1.4.2.tgz" + integrity sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw== + dependencies: + assert-plus "1.0.0" + extsprintf "1.3.0" + json-schema "0.4.0" + verror "1.10.0" + +jsqr@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/jsqr/-/jsqr-1.4.0.tgz#8efb8d0a7cc6863cb6d95116b9069123ce9eb2d1" + integrity sha512-dxLob7q65Xg2DvstYkRpkYtmKm2sPJ9oFhrhmudT1dZvNFFTlroai3AWSpLey/w5vMcLBXRgOJsbXpdN9HzU/A== + +jszip@^3.1.3: + version "3.7.1" + resolved "https://registry.npmjs.org/jszip/-/jszip-3.7.1.tgz" + integrity sha512-ghL0tz1XG9ZEmRMcEN2vt7xabrDdqHHeykgARpmZ0BiIctWxM47Vt63ZO2dnp4QYt/xJVLLy5Zv1l/xRdh2byg== + dependencies: + lie "~3.3.0" + pako "~1.0.2" + readable-stream "~2.3.6" + set-immediate-shim "~1.0.1" + +karma-chrome-launcher@~3.1.0: + version "3.1.0" + resolved "https://registry.npmjs.org/karma-chrome-launcher/-/karma-chrome-launcher-3.1.0.tgz" + integrity sha512-3dPs/n7vgz1rxxtynpzZTvb9y/GIaW8xjAwcIGttLbycqoFtI7yo1NGnQi6oFTherRE+GIhCAHZC4vEqWGhNvg== + dependencies: + which "^1.2.1" + +karma-coverage-istanbul-reporter@~3.0.2: + version "3.0.3" + resolved "https://registry.npmjs.org/karma-coverage-istanbul-reporter/-/karma-coverage-istanbul-reporter-3.0.3.tgz" + integrity sha512-wE4VFhG/QZv2Y4CdAYWDbMmcAHeS926ZIji4z+FkB2aF/EposRb6DP6G5ncT/wXhqUfAb/d7kZrNKPonbvsATw== + dependencies: + istanbul-lib-coverage "^3.0.0" + istanbul-lib-report "^3.0.0" + istanbul-lib-source-maps "^3.0.6" + istanbul-reports "^3.0.2" + minimatch "^3.0.4" + +karma-jasmine-html-reporter@^1.5.0: + version "1.7.0" + resolved "https://registry.npmjs.org/karma-jasmine-html-reporter/-/karma-jasmine-html-reporter-1.7.0.tgz" + integrity sha512-pzum1TL7j90DTE86eFt48/s12hqwQuiD+e5aXx2Dc9wDEn2LfGq6RoAxEZZjFiN0RDSCOnosEKRZWxbQ+iMpQQ== + +karma-jasmine@~3.3.0: + version "3.3.1" + resolved "https://registry.npmjs.org/karma-jasmine/-/karma-jasmine-3.3.1.tgz" + integrity sha512-Nxh7eX9mOQMyK0VSsMxdod+bcqrR/ikrmEiWj5M6fwuQ7oI+YEF1FckaDsWfs6TIpULm9f0fTKMjF7XcrvWyqQ== + dependencies: + jasmine-core "^3.5.0" + +karma-source-map-support@1.4.0: + version "1.4.0" + resolved "https://registry.npmjs.org/karma-source-map-support/-/karma-source-map-support-1.4.0.tgz" + integrity sha512-RsBECncGO17KAoJCYXjv+ckIz+Ii9NCi+9enk+rq6XC81ezYkb4/RHE6CTXdA7IOJqoF3wcaLfVG0CPmE5ca6A== + dependencies: + source-map-support "^0.5.5" + +karma@~5.0.0: + version "5.0.9" + resolved "https://registry.npmjs.org/karma/-/karma-5.0.9.tgz" + integrity sha512-dUA5z7Lo7G4FRSe1ZAXqOINEEWxmCjDBbfRBmU/wYlSMwxUQJP/tEEP90yJt3Uqo03s9rCgVnxtlfq+uDhxSPg== + dependencies: + body-parser "^1.19.0" + braces "^3.0.2" + chokidar "^3.0.0" + colors "^1.4.0" + connect "^3.7.0" + di "^0.0.1" + dom-serialize "^2.2.1" + flatted "^2.0.2" + glob "^7.1.6" + graceful-fs "^4.2.4" + http-proxy "^1.18.1" + isbinaryfile "^4.0.6" + lodash "^4.17.15" + log4js "^6.2.1" + mime "^2.4.5" + minimatch "^3.0.4" + qjobs "^1.2.0" + range-parser "^1.2.1" + rimraf "^3.0.2" + socket.io "^2.3.0" + source-map "^0.6.1" + tmp "0.2.1" + ua-parser-js "0.7.21" + yargs "^15.3.1" + +keycloak-angular@^8.1.0: + version "8.4.0" + resolved "https://registry.npmjs.org/keycloak-angular/-/keycloak-angular-8.4.0.tgz" + integrity sha512-3zBKzPf+ZG+16EfOdp1uxa/XTGElTOQSq5UkfFJzFcJe1D6p696hKIUJHNJECcYNUtt4XhYwUEolMIR+VySqgA== + dependencies: + tslib "^2.0.0" + +keycloak-js@^11.0.3: + version "11.0.3" + resolved "https://registry.npmjs.org/keycloak-js/-/keycloak-js-11.0.3.tgz" + integrity sha512-e2OVyCiru25UhJz3aPj5irf//+vJzvAhHdcsCIWAcvF8Te22iUoZqEdNFji8D3zNzDehX4VpuIJwQOYCj6rqTA== + dependencies: + base64-js "1.3.1" + js-sha256 "0.9.0" + +killable@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/killable/-/killable-1.0.1.tgz" + integrity sha512-LzqtLKlUwirEUyl/nicirVmNiPvYs7l5n8wOPP7fyJVpUPkvCnW/vuiXGpylGUlnPDnB7311rARzAt3Mhswpjg== + +kind-of@^3.0.2, kind-of@^3.0.3, kind-of@^3.2.0: + version "3.2.2" + resolved "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz" + integrity sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ= + dependencies: + is-buffer "^1.1.5" + +kind-of@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz" + integrity sha1-IIE989cSkosgc3hpGkUGb65y3Vc= + dependencies: + is-buffer "^1.1.5" + +kind-of@^5.0.0: + version "5.1.0" + resolved "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz" + integrity sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw== + +kind-of@^6.0.0, kind-of@^6.0.2: + version "6.0.3" + resolved "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz" + integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw== + +less-loader@6.1.0: + version "6.1.0" + resolved "https://registry.npmjs.org/less-loader/-/less-loader-6.1.0.tgz" + integrity sha512-/jLzOwLyqJ7Kt3xg5sHHkXtOyShWwFj410K9Si9WO+/h8rmYxxkSR0A3/hFEntWudE20zZnWMtpMYnLzqTVdUA== + dependencies: + clone "^2.1.2" + less "^3.11.1" + loader-utils "^2.0.0" + schema-utils "^2.6.6" + +less@^3.11.1: + version "3.13.1" + resolved "https://registry.npmjs.org/less/-/less-3.13.1.tgz" + integrity sha512-SwA1aQXGUvp+P5XdZslUOhhLnClSLIjWvJhmd+Vgib5BFIr9lMNlQwmwUNOjXThF/A0x+MCYYPeWEfeWiLRnTw== + dependencies: + copy-anything "^2.0.1" + tslib "^1.10.0" + optionalDependencies: + errno "^0.1.1" + graceful-fs "^4.1.2" + image-size "~0.5.0" + make-dir "^2.1.0" + mime "^1.4.1" + native-request "^1.0.5" + source-map "~0.6.0" + +leven@^3.1.0: + version "3.1.0" + resolved "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz" + integrity sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A== + +levenary@^1.1.1: + version "1.1.1" + resolved "https://registry.npmjs.org/levenary/-/levenary-1.1.1.tgz" + integrity sha512-mkAdOIt79FD6irqjYSs4rdbnlT5vRonMEvBVPVb3XmevfS8kgRXwfes0dhPdEtzTWD/1eNE/Bm/G1iRt6DcnQQ== + dependencies: + leven "^3.1.0" + +libphonenumber-js@^1.6.8: + version "1.9.44" + resolved "https://registry.npmjs.org/libphonenumber-js/-/libphonenumber-js-1.9.44.tgz" + integrity sha512-zhw8nUMJuQf7jG1dZfEOKKOS6M3QYIv3HnvB/vGohNd0QfxIQcObH3a6Y6s350H+9xgBeOXClOJkS0hJ0yvS3g== + +license-webpack-plugin@2.2.0: + version "2.2.0" + resolved "https://registry.npmjs.org/license-webpack-plugin/-/license-webpack-plugin-2.2.0.tgz" + integrity sha512-XPsdL/0brSHf+7dXIlRqotnCQ58RX2au6otkOg4U3dm8uH+Ka/fW4iukEs95uXm+qKe/SBs+s1Ll/aQddKG+tg== + dependencies: + "@types/webpack-sources" "^0.1.5" + webpack-sources "^1.2.0" + +lie@~3.3.0: + version "3.3.0" + resolved "https://registry.npmjs.org/lie/-/lie-3.3.0.tgz" + integrity sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ== + dependencies: + immediate "~3.0.5" + +loader-runner@^2.4.0: + version "2.4.0" + resolved "https://registry.npmjs.org/loader-runner/-/loader-runner-2.4.0.tgz" + integrity sha512-Jsmr89RcXGIwivFY21FcRrisYZfvLMTWx5kOLc+JTxtpBOG6xML0vzbc6SEQG2FO9/4Fc3wW4LVcB5DmGflaRw== + +loader-utils@1.2.3: + version "1.2.3" + resolved "https://registry.npmjs.org/loader-utils/-/loader-utils-1.2.3.tgz" + integrity sha512-fkpz8ejdnEMG3s37wGL07iSBDg99O9D5yflE9RGNH3hRdx9SOwYfnGYdZOUIZitN8E+E2vkq3MUMYMvPYl5ZZA== + dependencies: + big.js "^5.2.2" + emojis-list "^2.0.0" + json5 "^1.0.1" + +loader-utils@2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.0.tgz" + integrity sha512-rP4F0h2RaWSvPEkD7BLDFQnvSf+nK+wr3ESUjNTyAGobqrijmW92zc+SO6d4p4B1wh7+B/Jg1mkQe5NYUEHtHQ== + dependencies: + big.js "^5.2.2" + emojis-list "^3.0.0" + json5 "^2.1.2" + +loader-utils@^1.0.2, loader-utils@^1.1.0, loader-utils@^1.2.3, loader-utils@^1.4.0: + version "1.4.0" + resolved "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz" + integrity sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA== + dependencies: + big.js "^5.2.2" + emojis-list "^3.0.0" + json5 "^1.0.1" + +loader-utils@^2.0.0: + version "2.0.2" + resolved "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.2.tgz" + integrity sha512-TM57VeHptv569d/GKh6TAYdzKblwDNiumOdkFnejjD0XwTH87K90w3O7AiJRqdQoXygvi1VQTJTLGhJl7WqA7A== + dependencies: + big.js "^5.2.2" + emojis-list "^3.0.0" + json5 "^2.1.2" + +locate-path@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz" + integrity sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A== + dependencies: + p-locate "^3.0.0" + path-exists "^3.0.0" + +locate-path@^5.0.0: + version "5.0.0" + resolved "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz" + integrity sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g== + dependencies: + p-locate "^4.1.0" + +lodash-es@^4.17.15, lodash-es@^4.17.21: + version "4.17.21" + resolved "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.21.tgz" + integrity sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw== + +lodash.clonedeep@^4.5.0: + version "4.5.0" + resolved "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz" + integrity sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8= + +lodash.deburr@^4.1.0: + version "4.1.0" + resolved "https://registry.npmjs.org/lodash.deburr/-/lodash.deburr-4.1.0.tgz" + integrity sha1-3bG7s+8HRYwBd7oH3hRCLLAz/5s= + +lodash.get@^4.4.2: + version "4.4.2" + resolved "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz" + integrity sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk= + +lodash.isequal@^4.5.0: + version "4.5.0" + resolved "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz" + integrity sha1-QVxEePK8wwEgwizhDtMib30+GOA= + +lodash.memoize@^4.1.2: + version "4.1.2" + resolved "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz" + integrity sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4= + +lodash.uniq@^4.5.0: + version "4.5.0" + resolved "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz" + integrity sha1-0CJTc662Uq3BvILklFM5qEJ1R3M= + +lodash@^4.17.11, lodash@^4.17.13, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.19, lodash@^4.7.0: + version "4.17.21" + resolved "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz" + integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== + +log-symbols@3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/log-symbols/-/log-symbols-3.0.0.tgz" + integrity sha512-dSkNGuI7iG3mfvDzUuYZyvk5dD9ocYCYzNU6CYDE6+Xqd+gwme6Z00NS3dUh8mq/73HaEtT7m6W+yUPtU6BZnQ== + dependencies: + chalk "^2.4.2" + +log-symbols@^4.0.0, log-symbols@^4.1.0: + version "4.1.0" + resolved "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz" + integrity sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg== + dependencies: + chalk "^4.1.0" + is-unicode-supported "^0.1.0" + +log4js@^6.2.1: + version "6.3.0" + resolved "https://registry.npmjs.org/log4js/-/log4js-6.3.0.tgz" + integrity sha512-Mc8jNuSFImQUIateBFwdOQcmC6Q5maU0VVvdC2R6XMb66/VnT+7WS4D/0EeNMZu1YODmJe5NIn2XftCzEocUgw== + dependencies: + date-format "^3.0.0" + debug "^4.1.1" + flatted "^2.0.1" + rfdc "^1.1.4" + streamroller "^2.2.4" + +loglevel@^1.6.8: + version "1.8.0" + resolved "https://registry.npmjs.org/loglevel/-/loglevel-1.8.0.tgz" + integrity sha512-G6A/nJLRgWOuuwdNuA6koovfEV1YpqqAG4pRUlFaz3jj2QNZ8M4vBqnVA+HBTmU/AMNUtlOsMmSpF6NyOjztbA== + +loose-envify@^1.0.0, loose-envify@^1.4.0: + version "1.4.0" + resolved "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz" + integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q== + dependencies: + js-tokens "^3.0.0 || ^4.0.0" + +lru-cache@^5.1.1: + version "5.1.1" + resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz" + integrity sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w== + dependencies: + yallist "^3.0.2" + +lru-cache@^6.0.0: + version "6.0.0" + resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz" + integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== + dependencies: + yallist "^4.0.0" + +magic-string@0.25.7, magic-string@^0.25.0: + version "0.25.7" + resolved "https://registry.npmjs.org/magic-string/-/magic-string-0.25.7.tgz" + integrity sha512-4CrMT5DOHTDk4HYDlzmwu4FVCcIYI8gauveasrdCu2IKIFOJ3f0v/8MDGJCDL9oD2ppz/Av1b0Nj345H9M+XIA== + dependencies: + sourcemap-codec "^1.4.4" + +make-dir@^2.0.0, make-dir@^2.1.0: + version "2.1.0" + resolved "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz" + integrity sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA== + dependencies: + pify "^4.0.1" + semver "^5.6.0" + +make-dir@^3.0.0, make-dir@^3.0.2: + version "3.1.0" + resolved "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz" + integrity sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw== + dependencies: + semver "^6.0.0" + +make-error@^1.1.1: + version "1.3.6" + resolved "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz" + integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw== + +make-fetch-happen@^5.0.0: + version "5.0.2" + resolved "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-5.0.2.tgz" + integrity sha512-07JHC0r1ykIoruKO8ifMXu+xEU8qOXDFETylktdug6vJDACnP+HKevOu3PXyNPzFyTSlz8vrBYlBO1JZRe8Cag== + dependencies: + agentkeepalive "^3.4.1" + cacache "^12.0.0" + http-cache-semantics "^3.8.1" + http-proxy-agent "^2.1.0" + https-proxy-agent "^2.2.3" + lru-cache "^5.1.1" + mississippi "^3.0.0" + node-fetch-npm "^2.0.2" + promise-retry "^1.1.1" + socks-proxy-agent "^4.0.0" + ssri "^6.0.0" + +map-cache@^0.2.2: + version "0.2.2" + resolved "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz" + integrity sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8= + +map-visit@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz" + integrity sha1-7Nyo8TFE5mDxtb1B8S80edmN+48= + dependencies: + object-visit "^1.0.0" + +md5.js@^1.3.4: + version "1.3.5" + resolved "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz" + integrity sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg== + dependencies: + hash-base "^3.0.0" + inherits "^2.0.1" + safe-buffer "^5.1.2" + +mdb-angular-ui-kit@^1.0.0-beta3: + version "1.5.1" + resolved "https://registry.npmjs.org/mdb-angular-ui-kit/-/mdb-angular-ui-kit-1.5.1.tgz" + integrity sha512-mxEaNRBrAWVjNtKPOo8PaPaA8WtXJZQfcQdwBSSlSogtYS77AdlLcfGMDKU1QsxIPcllOz9m/mWlshFTZzsjYQ== + dependencies: + tslib "^2.0.0" + +mdn-data@2.0.14: + version "2.0.14" + resolved "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz" + integrity sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow== + +mdn-data@2.0.4: + version "2.0.4" + resolved "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.4.tgz" + integrity sha512-iV3XNKw06j5Q7mi6h+9vbx23Tv7JkjEVgKHW4pimwyDGWm0OIQntJJ+u1C6mg6mK1EaTv42XQ7w76yuzH7M2cA== + +media-typer@0.3.0: + version "0.3.0" + resolved "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz" + integrity sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g= + +memory-fs@^0.4.1: + version "0.4.1" + resolved "https://registry.npmjs.org/memory-fs/-/memory-fs-0.4.1.tgz" + integrity sha1-OpoguEYlI+RHz7x+i7gO1me/xVI= + dependencies: + errno "^0.1.3" + readable-stream "^2.0.1" + +memory-fs@^0.5.0: + version "0.5.0" + resolved "https://registry.npmjs.org/memory-fs/-/memory-fs-0.5.0.tgz" + integrity sha512-jA0rdU5KoQMC0e6ppoNRtpp6vjFq6+NY7r8hywnC7V+1Xj/MtHwGIbB1QaK/dunyjWteJzmkpd7ooeWg10T7GA== + dependencies: + errno "^0.1.3" + readable-stream "^2.0.1" + +merge-descriptors@1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz" + integrity sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E= + +merge-source-map@^1.1.0: + version "1.1.0" + resolved "https://registry.npmjs.org/merge-source-map/-/merge-source-map-1.1.0.tgz" + integrity sha512-Qkcp7P2ygktpMPh2mCQZaf3jhN6D3Z/qVZHSdWvQ+2Ef5HgRAPBO57A77+ENm0CPx2+1Ce/MYKi3ymqdfuqibw== + dependencies: + source-map "^0.6.1" + +merge-stream@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz" + integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== + +merge2@^1.3.0: + version "1.4.1" + resolved "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz" + integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== + +methods@^1.1.1, methods@~1.1.2: + version "1.1.2" + resolved "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz" + integrity sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4= + +micromatch@^3.1.10, micromatch@^3.1.4: + version "3.1.10" + resolved "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz" + integrity sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg== + dependencies: + arr-diff "^4.0.0" + array-unique "^0.3.2" + braces "^2.3.1" + define-property "^2.0.2" + extend-shallow "^3.0.2" + extglob "^2.0.4" + fragment-cache "^0.2.1" + kind-of "^6.0.2" + nanomatch "^1.2.9" + object.pick "^1.3.0" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.2" + +micromatch@^4.0.4: + version "4.0.4" + resolved "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz" + integrity sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg== + dependencies: + braces "^3.0.1" + picomatch "^2.2.3" + +miller-rabin@^4.0.0: + version "4.0.1" + resolved "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz" + integrity sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA== + dependencies: + bn.js "^4.0.0" + brorand "^1.0.1" + +mime-db@1.51.0, "mime-db@>= 1.43.0 < 2": + version "1.51.0" + resolved "https://registry.npmjs.org/mime-db/-/mime-db-1.51.0.tgz" + integrity sha512-5y8A56jg7XVQx2mbv1lu49NR4dokRnhZYTtL+KGfaa27uq4pSTXkwQkFJl4pkRMyNFz/EtYDSkiiEHx3F7UN6g== + +mime-types@^2.1.12, mime-types@~2.1.17, mime-types@~2.1.19, mime-types@~2.1.24: + version "2.1.34" + resolved "https://registry.npmjs.org/mime-types/-/mime-types-2.1.34.tgz" + integrity sha512-6cP692WwGIs9XXdOO4++N+7qjqv0rqxxVvJ3VHPh/Sc9mVZcQP+ZGhkKiTvWMQRr2tbHkJP/Yn7Y0npb3ZBs4A== + dependencies: + mime-db "1.51.0" + +mime@1.6.0, mime@^1.4.1: + version "1.6.0" + resolved "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz" + integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== + +mime@^2.4.4, mime@^2.4.5: + version "2.6.0" + resolved "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz" + integrity sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg== + +mimic-fn@^2.1.0: + version "2.1.0" + resolved "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz" + integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== + +mini-css-extract-plugin@0.9.0: + version "0.9.0" + resolved "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-0.9.0.tgz" + integrity sha512-lp3GeY7ygcgAmVIcRPBVhIkf8Us7FZjA+ILpal44qLdSu11wmjKQ3d9k15lfD7pO4esu9eUIAW7qiYIBppv40A== + dependencies: + loader-utils "^1.1.0" + normalize-url "1.9.1" + schema-utils "^1.0.0" + webpack-sources "^1.1.0" + +minimalistic-assert@^1.0.0, minimalistic-assert@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz" + integrity sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A== + +minimalistic-crypto-utils@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz" + integrity sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo= + +minimatch@3.0.4, minimatch@^3.0.4: + version "3.0.4" + resolved "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz" + integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== + dependencies: + brace-expansion "^1.1.7" + +minimist@^1.2.0, minimist@^1.2.5: + version "1.2.5" + resolved "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz" + integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw== + +minipass-collect@^1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/minipass-collect/-/minipass-collect-1.0.2.tgz" + integrity sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA== + dependencies: + minipass "^3.0.0" + +minipass-flush@^1.0.5: + version "1.0.5" + resolved "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz" + integrity sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw== + dependencies: + minipass "^3.0.0" + +minipass-pipeline@^1.2.2: + version "1.2.4" + resolved "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz" + integrity sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A== + dependencies: + minipass "^3.0.0" + +minipass@^2.3.5, minipass@^2.6.0, minipass@^2.9.0: + version "2.9.0" + resolved "https://registry.npmjs.org/minipass/-/minipass-2.9.0.tgz" + integrity sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg== + dependencies: + safe-buffer "^5.1.2" + yallist "^3.0.0" + +minipass@^3.0.0, minipass@^3.1.1: + version "3.1.6" + resolved "https://registry.yarnpkg.com/minipass/-/minipass-3.1.6.tgz#3b8150aa688a711a1521af5e8779c1d3bb4f45ee" + integrity sha512-rty5kpw9/z8SX9dmxblFA6edItUmwJgMeYDZRrwlIVN27i8gysGbznJwUggw2V/FVqFSDdWy040ZPS811DYAqQ== + dependencies: + yallist "^4.0.0" + +minizlib@^1.3.3: + version "1.3.3" + resolved "https://registry.npmjs.org/minizlib/-/minizlib-1.3.3.tgz" + integrity sha512-6ZYMOEnmVsdCeTJVE0W9ZD+pVnE8h9Hma/iOwwRDsdQoePpoX56/8B6z3P9VNwppJuBKNRuFDRNRqRWexT9G9Q== + dependencies: + minipass "^2.9.0" + +minizlib@^2.1.1: + version "2.1.2" + resolved "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz" + integrity sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg== + dependencies: + minipass "^3.0.0" + yallist "^4.0.0" + +mississippi@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/mississippi/-/mississippi-3.0.0.tgz" + integrity sha512-x471SsVjUtBRtcvd4BzKE9kFC+/2TeWgKCgw0bZcw1b9l2X3QX5vCWgF+KaZaYm87Ss//rHnWryupDrgLvmSkA== + dependencies: + concat-stream "^1.5.0" + duplexify "^3.4.2" + end-of-stream "^1.1.0" + flush-write-stream "^1.0.0" + from2 "^2.1.0" + parallel-transform "^1.1.0" + pump "^3.0.0" + pumpify "^1.3.3" + stream-each "^1.1.0" + through2 "^2.0.0" + +mixin-deep@^1.2.0: + version "1.3.2" + resolved "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz" + integrity sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA== + dependencies: + for-in "^1.0.2" + is-extendable "^1.0.1" + +mkdirp@0.5.5, mkdirp@^0.5.1, mkdirp@^0.5.3, mkdirp@^0.5.5, mkdirp@~0.5.1, mkdirp@~0.5.x: + version "0.5.5" + resolved "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz" + integrity sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ== + dependencies: + minimist "^1.2.5" + +mkdirp@^1.0.3, mkdirp@^1.0.4: + version "1.0.4" + resolved "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz" + integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== + +mocha@^7.1.1: + version "7.2.0" + resolved "https://registry.npmjs.org/mocha/-/mocha-7.2.0.tgz" + integrity sha512-O9CIypScywTVpNaRrCAgoUnJgozpIofjKUYmJhiCIJMiuYnLI6otcb1/kpW9/n/tJODHGZ7i8aLQoDVsMtOKQQ== + dependencies: + ansi-colors "3.2.3" + browser-stdout "1.3.1" + chokidar "3.3.0" + debug "3.2.6" + diff "3.5.0" + escape-string-regexp "1.0.5" + find-up "3.0.0" + glob "7.1.3" + growl "1.10.5" + he "1.2.0" + js-yaml "3.13.1" + log-symbols "3.0.0" + minimatch "3.0.4" + mkdirp "0.5.5" + ms "2.1.1" + node-environment-flags "1.0.6" + object.assign "4.1.0" + strip-json-comments "2.0.1" + supports-color "6.0.0" + which "1.3.1" + wide-align "1.1.3" + yargs "13.3.2" + yargs-parser "13.1.2" + yargs-unparser "1.6.0" + +move-concurrently@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/move-concurrently/-/move-concurrently-1.0.1.tgz" + integrity sha1-viwAX9oy4LKa8fBdfEszIUxwH5I= + dependencies: + aproba "^1.1.1" + copy-concurrently "^1.0.0" + fs-write-stream-atomic "^1.0.8" + mkdirp "^0.5.1" + rimraf "^2.5.4" + run-queue "^1.0.3" + +move-file@^2.0.0: + version "2.1.0" + resolved "https://registry.npmjs.org/move-file/-/move-file-2.1.0.tgz" + integrity sha512-i9qLW6gqboJ5Ht8bauZi7KlTnQ3QFpBCvMvFfEcHADKgHGeJ9BZMO7SFCTwHPV9Qa0du9DYY1Yx3oqlGt30nXA== + dependencies: + path-exists "^4.0.0" + +ms@2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz" + integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g= + +ms@2.1.1: + version "2.1.1" + resolved "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz" + integrity sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg== + +ms@2.1.2: + version "2.1.2" + resolved "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz" + integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== + +ms@^2.0.0, ms@^2.1.1: + version "2.1.3" + resolved "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz" + integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== + +multicast-dns-service-types@^1.1.0: + version "1.1.0" + resolved "https://registry.npmjs.org/multicast-dns-service-types/-/multicast-dns-service-types-1.1.0.tgz" + integrity sha1-iZ8R2WhuXgXLkbNdXw5jt3PPyQE= + +multicast-dns@^6.0.1: + version "6.2.3" + resolved "https://registry.npmjs.org/multicast-dns/-/multicast-dns-6.2.3.tgz" + integrity sha512-ji6J5enbMyGRHIAkAOu3WdV8nggqviKCEKtXcOqfphZZtQrmHKycfynJ2V7eVPUA4NhJ6V7Wf4TmGbTwKE9B6g== + dependencies: + dns-packet "^1.3.1" + thunky "^1.0.2" + +mute-stream@0.0.8: + version "0.0.8" + resolved "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz" + integrity sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA== + +nan@^2.12.1: + version "2.15.0" + resolved "https://registry.yarnpkg.com/nan/-/nan-2.15.0.tgz#3f34a473ff18e15c1b5626b62903b5ad6e665fee" + integrity sha512-8ZtvEnA2c5aYCZYd1cvgdnU6cqwixRoYg70xPLWUws5ORTa/lnw+u4amixRS/Ac5U5mQVgp9pnlSUnbNWFaWZQ== + +nanomatch@^1.2.9: + version "1.2.13" + resolved "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz" + integrity sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA== + dependencies: + arr-diff "^4.0.0" + array-unique "^0.3.2" + define-property "^2.0.2" + extend-shallow "^3.0.2" + fragment-cache "^0.2.1" + is-windows "^1.0.2" + kind-of "^6.0.2" + object.pick "^1.3.0" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.1" + +native-promise-only@^0.8.1: + version "0.8.1" + resolved "https://registry.npmjs.org/native-promise-only/-/native-promise-only-0.8.1.tgz" + integrity sha1-IKMYwwy0X3H+et+/eyHJnBRy7xE= + +native-request@^1.0.5: + version "1.1.0" + resolved "https://registry.npmjs.org/native-request/-/native-request-1.1.0.tgz" + integrity sha512-uZ5rQaeRn15XmpgE0xoPL8YWqcX90VtCFglYwAgkvKM5e8fog+vePLAhHxuuv/gRkrQxIeh5U3q9sMNUrENqWw== + +negotiator@0.6.2: + version "0.6.2" + resolved "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz" + integrity sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw== + +neo-async@^2.5.0, neo-async@^2.6.1: + version "2.6.2" + resolved "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz" + integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw== + +next-tick@~1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/next-tick/-/next-tick-1.0.0.tgz" + integrity sha1-yobR/ogoFpsBICCOPchCS524NCw= + +ng-otp-input@^1.7.1: + version "1.8.1" + resolved "https://registry.npmjs.org/ng-otp-input/-/ng-otp-input-1.8.1.tgz" + integrity sha512-mWl2Jhp3UCkEHsjaNzQHib3PnsMA/kVg+mpntW2KlyP6QKLQ8+PHbINKeyT5E944HeYyxEQzrHOVcmijzDOhGw== + dependencies: + tslib "^2.2.0" + +ng2-semantic-ui@^0.9.7: + version "0.9.7" + resolved "https://registry.npmjs.org/ng2-semantic-ui/-/ng2-semantic-ui-0.9.7.tgz" + integrity sha512-A7I3c1n65OXKa7YVxq6I2DjgWgKcyInVjSpze1hm73HPEEULoUSGBOK8IxbUxUUWiVvC6aGHd+IuoE4EkAIS0w== + dependencies: + bowser "^1.7.2" + date-fns "2.0.0-alpha.1" + element-closest "^2.0.2" + extend "^3.0.1" + is-ua-webview "^1.0.0" + popper.js "^1.14.0" + rxjs "^5.0.1" + +ngx-color-picker@^11.0.0: + version "11.0.0" + resolved "https://registry.npmjs.org/ngx-color-picker/-/ngx-color-picker-11.0.0.tgz" + integrity sha512-HyiFNPYLrCyYbFpLvZJaHC43RhjfDdFDij4pnvk9R46iH1scVtO6f2ibBgxRwBKKsT94KYvOH8wF8OrvztWdEw== + dependencies: + tslib "^2.0.0" + +ngx-extended-pdf-viewer@^10.1.0: + version "10.5.0" + resolved "https://registry.npmjs.org/ngx-extended-pdf-viewer/-/ngx-extended-pdf-viewer-10.5.0.tgz" + integrity sha512-lSZjbGYdIZX1d63OY2XigA+8Pidi8c33LmZPWZ/d88cXntJQpMyii32/d6j7v0ozZAbtF9IZxo7CGbbkCCjydg== + dependencies: + lodash.deburr "^4.1.0" + tslib "^2.2.0" + +ngx-pagination@^5.1.1: + version "5.1.1" + resolved "https://registry.npmjs.org/ngx-pagination/-/ngx-pagination-5.1.1.tgz" + integrity sha512-KxHES+Dn6pbetytO9ng2GAdclmo4UcwzFmQyVPWh2xRPbAlv5/ezL2xnDVBFMqCoJQaZagvdQ+ZZFbqGWqAvCQ== + +ngx-schema-form@^2.6.5: + version "2.6.8" + resolved "https://registry.npmjs.org/ngx-schema-form/-/ngx-schema-form-2.6.8.tgz" + integrity sha512-IrD938zxwIFvu//wVxg1GntxCKO3cIrrYTo32xYO5ocZdz5bj0LL2x1WC3wBd/3u77jpXc9Zu0Purg2nBodwCw== + dependencies: + tslib "^2.0.0" + +ngx-toastr@^13.2.1: + version "13.2.1" + resolved "https://registry.npmjs.org/ngx-toastr/-/ngx-toastr-13.2.1.tgz" + integrity sha512-UAzp7/xWK9IXA2LsOmhpaaIGCqscvJokoQpBNpAMrjEkDeSlFf8PWQAuQY795KW0mJb3qF9UG/s23nsXfMYKmg== + dependencies: + tslib "^2.0.0" + +ngx-webcam@^0.3.2: + version "0.3.2" + resolved "https://registry.npmjs.org/ngx-webcam/-/ngx-webcam-0.3.2.tgz" + integrity sha512-7imKrqc8b/CtLZ9g79fenCXcEwUxsi/4mdTnoSdwdbVHtU1pUmebxUNFPBEdEitiD09awGkcv2ZcgtqmJvIi8A== + dependencies: + tslib "^2.0.0" + +nice-try@^1.0.4: + version "1.0.5" + resolved "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz" + integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ== + +node-environment-flags@1.0.6: + version "1.0.6" + resolved "https://registry.npmjs.org/node-environment-flags/-/node-environment-flags-1.0.6.tgz" + integrity sha512-5Evy2epuL+6TM0lCQGpFIj6KwiEsGh1SrHUhTbNX+sLbBtjidPZFAnVK9y5yU1+h//RitLbRHTIMyxQPtxMdHw== + dependencies: + object.getownpropertydescriptors "^2.0.3" + semver "^5.7.0" + +node-fetch-npm@^2.0.2: + version "2.0.4" + resolved "https://registry.npmjs.org/node-fetch-npm/-/node-fetch-npm-2.0.4.tgz" + integrity sha512-iOuIQDWDyjhv9qSDrj9aq/klt6F9z1p2otB3AV7v3zBDcL/x+OfGsvGQZZCcMZbUf4Ujw1xGNQkjvGnVT22cKg== + dependencies: + encoding "^0.1.11" + json-parse-better-errors "^1.0.0" + safe-buffer "^5.1.1" + +node-forge@^0.10.0: + version "0.10.0" + resolved "https://registry.npmjs.org/node-forge/-/node-forge-0.10.0.tgz" + integrity sha512-PPmu8eEeG9saEUvI97fm4OYxXVB6bFvyNTyiUOBichBpFG8A1Ljw3bY62+5oOjDEMHRnd0Y7HQ+x7uzxOzC6JA== + +node-libs-browser@^2.2.1: + version "2.2.1" + resolved "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-2.2.1.tgz" + integrity sha512-h/zcD8H9kaDZ9ALUWwlBUDo6TKF8a7qBSCSEGfjTVIYeqsioSKaAX+BN7NgiMGp6iSIXZ3PxgCu8KS3b71YK5Q== + dependencies: + assert "^1.1.1" + browserify-zlib "^0.2.0" + buffer "^4.3.0" + console-browserify "^1.1.0" + constants-browserify "^1.0.0" + crypto-browserify "^3.11.0" + domain-browser "^1.1.1" + events "^3.0.0" + https-browserify "^1.0.0" + os-browserify "^0.3.0" + path-browserify "0.0.1" + process "^0.11.10" + punycode "^1.2.4" + querystring-es3 "^0.2.0" + readable-stream "^2.3.3" + stream-browserify "^2.0.1" + stream-http "^2.7.2" + string_decoder "^1.0.0" + timers-browserify "^2.0.4" + tty-browserify "0.0.0" + url "^0.11.0" + util "^0.11.0" + vm-browserify "^1.0.1" + +node-releases@^2.0.1: + version "2.0.1" + resolved "https://registry.npmjs.org/node-releases/-/node-releases-2.0.1.tgz" + integrity sha512-CqyzN6z7Q6aMeF/ktcMVTzhAHCEpf8SOarwpzpf8pNBY2k5/oM34UHldUwp8VKI7uxct2HxSRdJjBaZeESzcxA== + +normalize-package-data@^2.0.0, normalize-package-data@^2.4.0: + version "2.5.0" + resolved "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz" + integrity sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA== + dependencies: + hosted-git-info "^2.1.4" + resolve "^1.10.0" + semver "2 || 3 || 4 || 5" + validate-npm-package-license "^3.0.1" + +normalize-path@^2.1.1: + version "2.1.1" + resolved "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz" + integrity sha1-GrKLVW4Zg2Oowab35vogE3/mrtk= + dependencies: + remove-trailing-separator "^1.0.1" + +normalize-path@^3.0.0, normalize-path@~3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz" + integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== + +normalize-range@^0.1.2: + version "0.1.2" + resolved "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz" + integrity sha1-LRDAa9/TEuqXd2laTShDlFa3WUI= + +normalize-url@1.9.1: + version "1.9.1" + resolved "https://registry.npmjs.org/normalize-url/-/normalize-url-1.9.1.tgz" + integrity sha1-LMDWazHqIwNkWENuNiDYWVTGbDw= + dependencies: + object-assign "^4.0.1" + prepend-http "^1.0.0" + query-string "^4.1.0" + sort-keys "^1.0.0" + +normalize-url@^3.0.0: + version "3.3.0" + resolved "https://registry.npmjs.org/normalize-url/-/normalize-url-3.3.0.tgz" + integrity sha512-U+JJi7duF1o+u2pynbp2zXDW2/PADgC30f0GsHZtRh+HOcXHnw137TrNlyxxRvWW5fjKd3bcLHPxofWuCjaeZg== + +npm-bundled@^1.0.1: + version "1.1.2" + resolved "https://registry.npmjs.org/npm-bundled/-/npm-bundled-1.1.2.tgz" + integrity sha512-x5DHup0SuyQcmL3s7Rx/YQ8sbw/Hzg0rj48eN0dV7hf5cmQq5PXIeioroH3raV1QC1yh3uTYuMThvEQF3iKgGQ== + dependencies: + npm-normalize-package-bin "^1.0.1" + +npm-install-checks@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/npm-install-checks/-/npm-install-checks-4.0.0.tgz" + integrity sha512-09OmyDkNLYwqKPOnbI8exiOZU2GVVmQp7tgez2BPi5OZC8M82elDAps7sxC4l//uSUtotWqoEIDwjRvWH4qz8w== + dependencies: + semver "^7.1.1" + +npm-normalize-package-bin@^1.0.0, npm-normalize-package-bin@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-1.0.1.tgz" + integrity sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA== + +npm-package-arg@8.0.1, npm-package-arg@^8.0.0: + version "8.0.1" + resolved "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-8.0.1.tgz" + integrity sha512-/h5Fm6a/exByzFSTm7jAyHbgOqErl9qSNJDQF32Si/ZzgwT2TERVxRxn3Jurw1wflgyVVAxnFR4fRHPM7y1ClQ== + dependencies: + hosted-git-info "^3.0.2" + semver "^7.0.0" + validate-npm-package-name "^3.0.0" + +npm-package-arg@^6.0.0, npm-package-arg@^6.1.0: + version "6.1.1" + resolved "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-6.1.1.tgz" + integrity sha512-qBpssaL3IOZWi5vEKUKW0cO7kzLeT+EQO9W8RsLOZf76KF9E/K9+wH0C7t06HXPpaH8WH5xF1MExLuCwbTqRUg== + dependencies: + hosted-git-info "^2.7.1" + osenv "^0.1.5" + semver "^5.6.0" + validate-npm-package-name "^3.0.0" + +npm-packlist@^1.1.12: + version "1.4.8" + resolved "https://registry.npmjs.org/npm-packlist/-/npm-packlist-1.4.8.tgz" + integrity sha512-5+AZgwru5IevF5ZdnFglB5wNlHG1AOOuw28WhUq8/8emhBmLv6jX5by4WJCh7lW0uSYZYS6DXqIsyZVIXRZU9A== + dependencies: + ignore-walk "^3.0.1" + npm-bundled "^1.0.1" + npm-normalize-package-bin "^1.0.1" + +npm-pick-manifest@6.1.0: + version "6.1.0" + resolved "https://registry.npmjs.org/npm-pick-manifest/-/npm-pick-manifest-6.1.0.tgz" + integrity sha512-ygs4k6f54ZxJXrzT0x34NybRlLeZ4+6nECAIbr2i0foTnijtS1TJiyzpqtuUAJOps/hO0tNDr8fRV5g+BtRlTw== + dependencies: + npm-install-checks "^4.0.0" + npm-package-arg "^8.0.0" + semver "^7.0.0" + +npm-pick-manifest@^3.0.0: + version "3.0.2" + resolved "https://registry.npmjs.org/npm-pick-manifest/-/npm-pick-manifest-3.0.2.tgz" + integrity sha512-wNprTNg+X5nf+tDi+hbjdHhM4bX+mKqv6XmPh7B5eG+QY9VARfQPfCEH013H5GqfNj6ee8Ij2fg8yk0mzps1Vw== + dependencies: + figgy-pudding "^3.5.1" + npm-package-arg "^6.0.0" + semver "^5.4.1" + +npm-registry-fetch@^4.0.0: + version "4.0.7" + resolved "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-4.0.7.tgz" + integrity sha512-cny9v0+Mq6Tjz+e0erFAB+RYJ/AVGzkjnISiobqP8OWj9c9FLoZZu8/SPSKJWE17F1tk4018wfjV+ZbIbqC7fQ== + dependencies: + JSONStream "^1.3.4" + bluebird "^3.5.1" + figgy-pudding "^3.4.1" + lru-cache "^5.1.1" + make-fetch-happen "^5.0.0" + npm-package-arg "^6.1.0" + safe-buffer "^5.2.0" + +npm-run-path@^2.0.0: + version "2.0.2" + resolved "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz" + integrity sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8= + dependencies: + path-key "^2.0.0" + +nth-check@^1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/nth-check/-/nth-check-1.0.2.tgz" + integrity sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg== + dependencies: + boolbase "~1.0.0" + +num2fraction@^1.2.2: + version "1.2.2" + resolved "https://registry.npmjs.org/num2fraction/-/num2fraction-1.2.2.tgz" + integrity sha1-b2gragJ6Tp3fpFZM0lidHU5mnt4= + +oauth-sign@~0.9.0: + version "0.9.0" + resolved "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz" + integrity sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ== + +object-assign@^4.0.1, object-assign@^4.1.0: + version "4.1.1" + resolved "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz" + integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM= + +object-copy@^0.1.0: + version "0.1.0" + resolved "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz" + integrity sha1-fn2Fi3gb18mRpBupde04EnVOmYw= + dependencies: + copy-descriptor "^0.1.0" + define-property "^0.2.5" + kind-of "^3.0.3" + +object-inspect@^1.11.0, object-inspect@^1.9.0: + version "1.11.1" + resolved "https://registry.npmjs.org/object-inspect/-/object-inspect-1.11.1.tgz" + integrity sha512-If7BjFlpkzzBeV1cqgT3OSWT3azyoxDGajR+iGnFBfVV2EWyDyWaZZW2ERDjUaY2QM8i5jI3Sj7mhsM4DDAqWA== + +object-is@^1.0.1: + version "1.1.5" + resolved "https://registry.npmjs.org/object-is/-/object-is-1.1.5.tgz" + integrity sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.3" + +object-keys@^1.0.11, object-keys@^1.0.12, object-keys@^1.1.1: + version "1.1.1" + resolved "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz" + integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== + +object-path@0.11.4: + version "0.11.4" + resolved "https://registry.npmjs.org/object-path/-/object-path-0.11.4.tgz" + integrity sha1-NwrnUvvzfePqcKhhwju6iRVpGUk= + +object-visit@^1.0.0: + version "1.0.1" + resolved "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz" + integrity sha1-95xEk68MU3e1n+OdOV5BBC3QRbs= + dependencies: + isobject "^3.0.0" + +object.assign@4.1.0: + version "4.1.0" + resolved "https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz" + integrity sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w== + dependencies: + define-properties "^1.1.2" + function-bind "^1.1.1" + has-symbols "^1.0.0" + object-keys "^1.0.11" + +object.assign@^4.1.0, object.assign@^4.1.2: + version "4.1.2" + resolved "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz" + integrity sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ== + dependencies: + call-bind "^1.0.0" + define-properties "^1.1.3" + has-symbols "^1.0.1" + object-keys "^1.1.1" + +object.getownpropertydescriptors@^2.0.3, object.getownpropertydescriptors@^2.1.0: + version "2.1.3" + resolved "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.3.tgz" + integrity sha512-VdDoCwvJI4QdC6ndjpqFmoL3/+HxffFBbcJzKi5hwLLqqx3mdbedRpfZDdK0SrOSauj8X4GzBvnDZl4vTN7dOw== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.3" + es-abstract "^1.19.1" + +object.pick@^1.3.0: + version "1.3.0" + resolved "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz" + integrity sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c= + dependencies: + isobject "^3.0.1" + +object.values@^1.1.0: + version "1.1.5" + resolved "https://registry.npmjs.org/object.values/-/object.values-1.1.5.tgz" + integrity sha512-QUZRW0ilQ3PnPpbNtgdNV1PDbEqLIiSFB3l+EnGtBQ/8SUTLj1PZwtQHABZtLgwpJZTSZhuGLOGk57Drx2IvYg== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.3" + es-abstract "^1.19.1" + +obuf@^1.0.0, obuf@^1.1.2: + version "1.1.2" + resolved "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz" + integrity sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg== + +on-finished@~2.3.0: + version "2.3.0" + resolved "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz" + integrity sha1-IPEzZIGwg811M3mSoWlxqi2QaUc= + dependencies: + ee-first "1.1.1" + +on-headers@~1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz" + integrity sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA== + +once@^1.3.0, once@^1.3.1, once@^1.4.0: + version "1.4.0" + resolved "https://registry.npmjs.org/once/-/once-1.4.0.tgz" + integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= + dependencies: + wrappy "1" + +onetime@^5.1.0: + version "5.1.2" + resolved "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz" + integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg== + dependencies: + mimic-fn "^2.1.0" + +ono@^6.0.0: + version "6.0.1" + resolved "https://registry.npmjs.org/ono/-/ono-6.0.1.tgz" + integrity sha512-5rdYW/106kHqLeG22GE2MHKq+FlsxMERZev9DCzQX1zwkxnFwBivSn5i17a5O/rDmOJOdf4Wyt80UZljzx9+DA== + +open@7.0.4: + version "7.0.4" + resolved "https://registry.npmjs.org/open/-/open-7.0.4.tgz" + integrity sha512-brSA+/yq+b08Hsr4c8fsEW2CRzk1BmfN3SAK/5VCHQ9bdoZJ4qa/+AfR0xHjlbbZUyPkUHs1b8x1RqdyZdkVqQ== + dependencies: + is-docker "^2.0.0" + is-wsl "^2.1.1" + +open@7.2.0: + version "7.2.0" + resolved "https://registry.npmjs.org/open/-/open-7.2.0.tgz" + integrity sha512-4HeyhxCvBTI5uBePsAdi55C5fmqnWZ2e2MlmvWi5KW5tdH5rxoiv/aMtbeVxKZc3eWkT1GymMnLG8XC4Rq4TDQ== + dependencies: + is-docker "^2.0.0" + is-wsl "^2.1.1" + +opn@^5.5.0: + version "5.5.0" + resolved "https://registry.npmjs.org/opn/-/opn-5.5.0.tgz" + integrity sha512-PqHpggC9bLV0VeWcdKhkpxY+3JTzetLSqTCWL/z/tFIbI6G8JCjondXklT1JinczLz2Xib62sSp0T/gKT4KksA== + dependencies: + is-wsl "^1.1.0" + +ora@5.0.0: + version "5.0.0" + resolved "https://registry.npmjs.org/ora/-/ora-5.0.0.tgz" + integrity sha512-s26qdWqke2kjN/wC4dy+IQPBIMWBJlSU/0JZhk30ZDBLelW25rv66yutUWARMigpGPzcXHb+Nac5pNhN/WsARw== + dependencies: + chalk "^4.1.0" + cli-cursor "^3.1.0" + cli-spinners "^2.4.0" + is-interactive "^1.0.0" + log-symbols "^4.0.0" + mute-stream "0.0.8" + strip-ansi "^6.0.0" + wcwidth "^1.0.1" + +ora@5.4.1: + version "5.4.1" + resolved "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz" + integrity sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ== + dependencies: + bl "^4.1.0" + chalk "^4.1.0" + cli-cursor "^3.1.0" + cli-spinners "^2.5.0" + is-interactive "^1.0.0" + is-unicode-supported "^0.1.0" + log-symbols "^4.1.0" + strip-ansi "^6.0.0" + wcwidth "^1.0.1" + +original@^1.0.0: + version "1.0.2" + resolved "https://registry.npmjs.org/original/-/original-1.0.2.tgz" + integrity sha512-hyBVl6iqqUOJ8FqRe+l/gS8H+kKYjrEndd5Pm1MfBtsEKA038HkkdbAl/72EAXGyonD/PFsvmVG+EvcIpliMBg== + dependencies: + url-parse "^1.4.3" + +os-browserify@^0.3.0: + version "0.3.0" + resolved "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz" + integrity sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc= + +os-homedir@^1.0.0: + version "1.0.2" + resolved "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz" + integrity sha1-/7xJiDNuDoM94MFox+8VISGqf7M= + +os-tmpdir@^1.0.0, os-tmpdir@~1.0.1, os-tmpdir@~1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz" + integrity sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ= + +osenv@^0.1.5: + version "0.1.5" + resolved "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz" + integrity sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g== + dependencies: + os-homedir "^1.0.0" + os-tmpdir "^1.0.0" + +p-finally@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz" + integrity sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4= + +p-limit@^2.0.0, p-limit@^2.2.0, p-limit@^2.3.0: + version "2.3.0" + resolved "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz" + integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w== + dependencies: + p-try "^2.0.0" + +p-limit@^3.0.1: + version "3.1.0" + resolved "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz" + integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== + dependencies: + yocto-queue "^0.1.0" + +p-locate@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz" + integrity sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ== + dependencies: + p-limit "^2.0.0" + +p-locate@^4.1.0: + version "4.1.0" + resolved "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz" + integrity sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A== + dependencies: + p-limit "^2.2.0" + +p-map@^2.0.0: + version "2.1.0" + resolved "https://registry.npmjs.org/p-map/-/p-map-2.1.0.tgz" + integrity sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw== + +p-map@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz" + integrity sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ== + dependencies: + aggregate-error "^3.0.0" + +p-retry@^3.0.1: + version "3.0.1" + resolved "https://registry.npmjs.org/p-retry/-/p-retry-3.0.1.tgz" + integrity sha512-XE6G4+YTTkT2a0UWb2kjZe8xNwf8bIbnqpc/IS/idOBVhyves0mK5OJgeocjx7q5pvX/6m23xuzVPYT1uGM73w== + dependencies: + retry "^0.12.0" + +p-try@^2.0.0: + version "2.2.0" + resolved "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz" + integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== + +pacote@9.5.12: + version "9.5.12" + resolved "https://registry.npmjs.org/pacote/-/pacote-9.5.12.tgz" + integrity sha512-BUIj/4kKbwWg4RtnBncXPJd15piFSVNpTzY0rysSr3VnMowTYgkGKcaHrbReepAkjTr8lH2CVWRi58Spg2CicQ== + dependencies: + bluebird "^3.5.3" + cacache "^12.0.2" + chownr "^1.1.2" + figgy-pudding "^3.5.1" + get-stream "^4.1.0" + glob "^7.1.3" + infer-owner "^1.0.4" + lru-cache "^5.1.1" + make-fetch-happen "^5.0.0" + minimatch "^3.0.4" + minipass "^2.3.5" + mississippi "^3.0.0" + mkdirp "^0.5.1" + normalize-package-data "^2.4.0" + npm-normalize-package-bin "^1.0.0" + npm-package-arg "^6.1.0" + npm-packlist "^1.1.12" + npm-pick-manifest "^3.0.0" + npm-registry-fetch "^4.0.0" + osenv "^0.1.5" + promise-inflight "^1.0.1" + promise-retry "^1.1.1" + protoduck "^5.0.1" + rimraf "^2.6.2" + safe-buffer "^5.1.2" + semver "^5.6.0" + ssri "^6.0.1" + tar "^4.4.10" + unique-filename "^1.1.1" + which "^1.3.1" + +pako@~1.0.2, pako@~1.0.5: + version "1.0.11" + resolved "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz" + integrity sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw== + +parallel-transform@^1.1.0: + version "1.2.0" + resolved "https://registry.npmjs.org/parallel-transform/-/parallel-transform-1.2.0.tgz" + integrity sha512-P2vSmIu38uIlvdcU7fDkyrxj33gTUy/ABO5ZUbGowxNCopBq/OoD42bP4UmMrJoPyk4Uqf0mu3mtWBhHCZD8yg== + dependencies: + cyclist "^1.0.1" + inherits "^2.0.3" + readable-stream "^2.1.5" + +parse-asn1@^5.0.0, parse-asn1@^5.1.5: + version "5.1.6" + resolved "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.6.tgz" + integrity sha512-RnZRo1EPU6JBnra2vGHj0yhp6ebyjBZpmUCLHWiFhxlzvBCCpAuZ7elsBp1PVAbQN0/04VD/19rfzlBSwLstMw== + dependencies: + asn1.js "^5.2.0" + browserify-aes "^1.0.0" + evp_bytestokey "^1.0.0" + pbkdf2 "^3.0.3" + safe-buffer "^5.1.1" + +parse-json@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz" + integrity sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA= + dependencies: + error-ex "^1.3.1" + json-parse-better-errors "^1.0.1" + +parse-passwd@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz" + integrity sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY= + +parse5@4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/parse5/-/parse5-4.0.0.tgz" + integrity sha512-VrZ7eOd3T1Fk4XWNXMgiGBK/z0MG48BWG2uQNU4I72fkQuKUTZpl+u9k+CxEG0twMVzSmXEEz12z5Fnw1jIQFA== + +parse5@^5.0.0: + version "5.1.1" + resolved "https://registry.npmjs.org/parse5/-/parse5-5.1.1.tgz" + integrity sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug== + +parseqs@0.0.6: + version "0.0.6" + resolved "https://registry.npmjs.org/parseqs/-/parseqs-0.0.6.tgz" + integrity sha512-jeAGzMDbfSHHA091hr0r31eYfTig+29g3GKKE/PPbEQ65X0lmMwlEoqmhzu0iztID5uJpZsFlUPDP8ThPL7M8w== + +parseuri@0.0.6: + version "0.0.6" + resolved "https://registry.npmjs.org/parseuri/-/parseuri-0.0.6.tgz" + integrity sha512-AUjen8sAkGgao7UyCX6Ahv0gIK2fABKmYjvP4xmy5JaKvcbTRueIqIPHLAfq30xJddqSE033IOMUSOMCcK3Sow== + +parseurl@~1.3.2, parseurl@~1.3.3: + version "1.3.3" + resolved "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz" + integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ== + +pascalcase@^0.1.1: + version "0.1.1" + resolved "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz" + integrity sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ= + +path-browserify@0.0.1: + version "0.0.1" + resolved "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.1.tgz" + integrity sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ== + +path-dirname@^1.0.0: + version "1.0.2" + resolved "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz" + integrity sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA= + +path-exists@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz" + integrity sha1-zg6+ql94yxiSXqfYENe1mwEP1RU= + +path-exists@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz" + integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== + +path-is-absolute@^1.0.0: + version "1.0.1" + resolved "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz" + integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= + +path-is-inside@^1.0.1, path-is-inside@^1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz" + integrity sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM= + +path-key@^2.0.0, path-key@^2.0.1: + version "2.0.1" + resolved "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz" + integrity sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A= + +path-loader@^1.0.10: + version "1.0.10" + resolved "https://registry.npmjs.org/path-loader/-/path-loader-1.0.10.tgz" + integrity sha512-CMP0v6S6z8PHeJ6NFVyVJm6WyJjIwFvyz2b0n2/4bKdS/0uZa/9sKUlYZzubrn3zuDRU0zIuEDX9DZYQ2ZI8TA== + dependencies: + native-promise-only "^0.8.1" + superagent "^3.8.3" + +path-parse@^1.0.6: + version "1.0.7" + resolved "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz" + integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== + +path-to-regexp@0.1.7: + version "0.1.7" + resolved "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz" + integrity sha1-32BBeABfUi8V60SQ5yR6G/qmf4w= + +path-type@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz" + integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== + +path@^0.12.7: + version "0.12.7" + resolved "https://registry.npmjs.org/path/-/path-0.12.7.tgz" + integrity sha1-1NwqUGxM4hl+tIHr/NWzbAFAsQ8= + dependencies: + process "^0.11.1" + util "^0.10.3" + +pbkdf2@^3.0.3: + version "3.1.2" + resolved "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.2.tgz" + integrity sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA== + dependencies: + create-hash "^1.1.2" + create-hmac "^1.1.4" + ripemd160 "^2.0.1" + safe-buffer "^5.0.1" + sha.js "^2.4.8" + +performance-now@^2.1.0: + version "2.1.0" + resolved "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz" + integrity sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns= + +picocolors@^0.2.1: + version "0.2.1" + resolved "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz" + integrity sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA== + +picocolors@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz" + integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ== + +picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.2.3: + version "2.3.0" + resolved "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz" + integrity sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw== + +pify@^2.0.0, pify@^2.3.0: + version "2.3.0" + resolved "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz" + integrity sha1-7RQaasBDqEnqWISY59yosVMw6Qw= + +pify@^4.0.1: + version "4.0.1" + resolved "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz" + integrity sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g== + +pinkie-promise@^2.0.0: + version "2.0.1" + resolved "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz" + integrity sha1-ITXW36ejWMBprJsXh3YogihFD/o= + dependencies: + pinkie "^2.0.0" + +pinkie@^2.0.0: + version "2.0.4" + resolved "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz" + integrity sha1-clVrgM+g1IqXToDnckjoDtT3+HA= + +pkg-dir@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz" + integrity sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw== + dependencies: + find-up "^3.0.0" + +pkg-dir@^4.1.0: + version "4.2.0" + resolved "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz" + integrity sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ== + dependencies: + find-up "^4.0.0" + +pnp-webpack-plugin@1.6.4: + version "1.6.4" + resolved "https://registry.npmjs.org/pnp-webpack-plugin/-/pnp-webpack-plugin-1.6.4.tgz" + integrity sha512-7Wjy+9E3WwLOEL30D+m8TSTF7qJJUJLONBnwQp0518siuMxUQUbgZwssaFX+QKlZkjHZcw/IpZCt/H0srrntSg== + dependencies: + ts-pnp "^1.1.6" + +popper.js@^1.14.0: + version "1.16.1" + resolved "https://registry.npmjs.org/popper.js/-/popper.js-1.16.1.tgz" + integrity sha512-Wb4p1J4zyFTbM+u6WuO4XstYx4Ky9Cewe4DWrel7B0w6VVICvPwdOpotjzcf6eD8TsckVnIMNONQyPIUFOUbCQ== + +portfinder@^1.0.26: + version "1.0.28" + resolved "https://registry.npmjs.org/portfinder/-/portfinder-1.0.28.tgz" + integrity sha512-Se+2isanIcEqf2XMHjyUKskczxbPH7dQnlMjXX6+dybayyHvAf/TCgyMRlzf/B6QDhAEFOGes0pzRo3by4AbMA== + dependencies: + async "^2.6.2" + debug "^3.1.1" + mkdirp "^0.5.5" + +posix-character-classes@^0.1.0: + version "0.1.1" + resolved "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz" + integrity sha1-AerA/jta9xoqbAL+q7jB/vfgDqs= + +postcss-calc@^7.0.1: + version "7.0.5" + resolved "https://registry.npmjs.org/postcss-calc/-/postcss-calc-7.0.5.tgz" + integrity sha512-1tKHutbGtLtEZF6PT4JSihCHfIVldU72mZ8SdZHIYriIZ9fh9k9aWSppaT8rHsyI3dX+KSR+W+Ix9BMY3AODrg== + dependencies: + postcss "^7.0.27" + postcss-selector-parser "^6.0.2" + postcss-value-parser "^4.0.2" + +postcss-colormin@^4.0.3: + version "4.0.3" + resolved "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-4.0.3.tgz" + integrity sha512-WyQFAdDZpExQh32j0U0feWisZ0dmOtPl44qYmJKkq9xFWY3p+4qnRzCHeNrkeRhwPHz9bQ3mo0/yVkaply0MNw== + dependencies: + browserslist "^4.0.0" + color "^3.0.0" + has "^1.0.0" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + +postcss-convert-values@^4.0.1: + version "4.0.1" + resolved "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-4.0.1.tgz" + integrity sha512-Kisdo1y77KUC0Jmn0OXU/COOJbzM8cImvw1ZFsBgBgMgb1iL23Zs/LXRe3r+EZqM3vGYKdQ2YJVQ5VkJI+zEJQ== + dependencies: + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + +postcss-discard-comments@^4.0.2: + version "4.0.2" + resolved "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-4.0.2.tgz" + integrity sha512-RJutN259iuRf3IW7GZyLM5Sw4GLTOH8FmsXBnv8Ab/Tc2k4SR4qbV4DNbyyY4+Sjo362SyDmW2DQ7lBSChrpkg== + dependencies: + postcss "^7.0.0" + +postcss-discard-duplicates@^4.0.2: + version "4.0.2" + resolved "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-4.0.2.tgz" + integrity sha512-ZNQfR1gPNAiXZhgENFfEglF93pciw0WxMkJeVmw8eF+JZBbMD7jp6C67GqJAXVZP2BWbOztKfbsdmMp/k8c6oQ== + dependencies: + postcss "^7.0.0" + +postcss-discard-empty@^4.0.1: + version "4.0.1" + resolved "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-4.0.1.tgz" + integrity sha512-B9miTzbznhDjTfjvipfHoqbWKwd0Mj+/fL5s1QOz06wufguil+Xheo4XpOnc4NqKYBCNqqEzgPv2aPBIJLox0w== + dependencies: + postcss "^7.0.0" + +postcss-discard-overridden@^4.0.1: + version "4.0.1" + resolved "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-4.0.1.tgz" + integrity sha512-IYY2bEDD7g1XM1IDEsUT4//iEYCxAmP5oDSFMVU/JVvT7gh+l4fmjciLqGgwjdWpQIdb0Che2VX00QObS5+cTg== + dependencies: + postcss "^7.0.0" + +postcss-import@12.0.1: + version "12.0.1" + resolved "https://registry.npmjs.org/postcss-import/-/postcss-import-12.0.1.tgz" + integrity sha512-3Gti33dmCjyKBgimqGxL3vcV8w9+bsHwO5UrBawp796+jdardbcFl4RP5w/76BwNL7aGzpKstIfF9I+kdE8pTw== + dependencies: + postcss "^7.0.1" + postcss-value-parser "^3.2.3" + read-cache "^1.0.0" + resolve "^1.1.7" + +postcss-load-config@^2.0.0: + version "2.1.2" + resolved "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-2.1.2.tgz" + integrity sha512-/rDeGV6vMUo3mwJZmeHfEDvwnTKKqQ0S7OHUi/kJvvtx3aWtyWG2/0ZWnzCt2keEclwN6Tf0DST2v9kITdOKYw== + dependencies: + cosmiconfig "^5.0.0" + import-cwd "^2.0.0" + +postcss-loader@3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/postcss-loader/-/postcss-loader-3.0.0.tgz" + integrity sha512-cLWoDEY5OwHcAjDnkyRQzAXfs2jrKjXpO/HQFcc5b5u/r7aa471wdmChmwfnv7x2u840iat/wi0lQ5nbRgSkUA== + dependencies: + loader-utils "^1.1.0" + postcss "^7.0.0" + postcss-load-config "^2.0.0" + schema-utils "^1.0.0" + +postcss-merge-longhand@^4.0.11: + version "4.0.11" + resolved "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-4.0.11.tgz" + integrity sha512-alx/zmoeXvJjp7L4mxEMjh8lxVlDFX1gqWHzaaQewwMZiVhLo42TEClKaeHbRf6J7j82ZOdTJ808RtN0ZOZwvw== + dependencies: + css-color-names "0.0.4" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + stylehacks "^4.0.0" + +postcss-merge-rules@^4.0.3: + version "4.0.3" + resolved "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-4.0.3.tgz" + integrity sha512-U7e3r1SbvYzO0Jr3UT/zKBVgYYyhAz0aitvGIYOYK5CPmkNih+WDSsS5tvPrJ8YMQYlEMvsZIiqmn7HdFUaeEQ== + dependencies: + browserslist "^4.0.0" + caniuse-api "^3.0.0" + cssnano-util-same-parent "^4.0.0" + postcss "^7.0.0" + postcss-selector-parser "^3.0.0" + vendors "^1.0.0" + +postcss-minify-font-values@^4.0.2: + version "4.0.2" + resolved "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-4.0.2.tgz" + integrity sha512-j85oO6OnRU9zPf04+PZv1LYIYOprWm6IA6zkXkrJXyRveDEuQggG6tvoy8ir8ZwjLxLuGfNkCZEQG7zan+Hbtg== + dependencies: + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + +postcss-minify-gradients@^4.0.2: + version "4.0.2" + resolved "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-4.0.2.tgz" + integrity sha512-qKPfwlONdcf/AndP1U8SJ/uzIJtowHlMaSioKzebAXSG4iJthlWC9iSWznQcX4f66gIWX44RSA841HTHj3wK+Q== + dependencies: + cssnano-util-get-arguments "^4.0.0" + is-color-stop "^1.0.0" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + +postcss-minify-params@^4.0.2: + version "4.0.2" + resolved "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-4.0.2.tgz" + integrity sha512-G7eWyzEx0xL4/wiBBJxJOz48zAKV2WG3iZOqVhPet/9geefm/Px5uo1fzlHu+DOjT+m0Mmiz3jkQzVHe6wxAWg== + dependencies: + alphanum-sort "^1.0.0" + browserslist "^4.0.0" + cssnano-util-get-arguments "^4.0.0" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + uniqs "^2.0.0" + +postcss-minify-selectors@^4.0.2: + version "4.0.2" + resolved "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-4.0.2.tgz" + integrity sha512-D5S1iViljXBj9kflQo4YutWnJmwm8VvIsU1GeXJGiG9j8CIg9zs4voPMdQDUmIxetUOh60VilsNzCiAFTOqu3g== + dependencies: + alphanum-sort "^1.0.0" + has "^1.0.0" + postcss "^7.0.0" + postcss-selector-parser "^3.0.0" + +postcss-modules-extract-imports@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-2.0.0.tgz" + integrity sha512-LaYLDNS4SG8Q5WAWqIJgdHPJrDDr/Lv775rMBFUbgjTz6j34lUznACHcdRWroPvXANP2Vj7yNK57vp9eFqzLWQ== + dependencies: + postcss "^7.0.5" + +postcss-modules-local-by-default@^3.0.2: + version "3.0.3" + resolved "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-3.0.3.tgz" + integrity sha512-e3xDq+LotiGesympRlKNgaJ0PCzoUIdpH0dj47iWAui/kyTgh3CiAr1qP54uodmJhl6p9rN6BoNcdEDVJx9RDw== + dependencies: + icss-utils "^4.1.1" + postcss "^7.0.32" + postcss-selector-parser "^6.0.2" + postcss-value-parser "^4.1.0" + +postcss-modules-scope@^2.2.0: + version "2.2.0" + resolved "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-2.2.0.tgz" + integrity sha512-YyEgsTMRpNd+HmyC7H/mh3y+MeFWevy7V1evVhJWewmMbjDHIbZbOXICC2y+m1xI1UVfIT1HMW/O04Hxyu9oXQ== + dependencies: + postcss "^7.0.6" + postcss-selector-parser "^6.0.0" + +postcss-modules-values@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-3.0.0.tgz" + integrity sha512-1//E5jCBrZ9DmRX+zCtmQtRSV6PV42Ix7Bzj9GbwJceduuf7IqP8MgeTXuRDHOWj2m0VzZD5+roFWDuU8RQjcg== + dependencies: + icss-utils "^4.0.0" + postcss "^7.0.6" + +postcss-normalize-charset@^4.0.1: + version "4.0.1" + resolved "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-4.0.1.tgz" + integrity sha512-gMXCrrlWh6G27U0hF3vNvR3w8I1s2wOBILvA87iNXaPvSNo5uZAMYsZG7XjCUf1eVxuPfyL4TJ7++SGZLc9A3g== + dependencies: + postcss "^7.0.0" + +postcss-normalize-display-values@^4.0.2: + version "4.0.2" + resolved "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-4.0.2.tgz" + integrity sha512-3F2jcsaMW7+VtRMAqf/3m4cPFhPD3EFRgNs18u+k3lTJJlVe7d0YPO+bnwqo2xg8YiRpDXJI2u8A0wqJxMsQuQ== + dependencies: + cssnano-util-get-match "^4.0.0" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + +postcss-normalize-positions@^4.0.2: + version "4.0.2" + resolved "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-4.0.2.tgz" + integrity sha512-Dlf3/9AxpxE+NF1fJxYDeggi5WwV35MXGFnnoccP/9qDtFrTArZ0D0R+iKcg5WsUd8nUYMIl8yXDCtcrT8JrdA== + dependencies: + cssnano-util-get-arguments "^4.0.0" + has "^1.0.0" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + +postcss-normalize-repeat-style@^4.0.2: + version "4.0.2" + resolved "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-4.0.2.tgz" + integrity sha512-qvigdYYMpSuoFs3Is/f5nHdRLJN/ITA7huIoCyqqENJe9PvPmLhNLMu7QTjPdtnVf6OcYYO5SHonx4+fbJE1+Q== + dependencies: + cssnano-util-get-arguments "^4.0.0" + cssnano-util-get-match "^4.0.0" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + +postcss-normalize-string@^4.0.2: + version "4.0.2" + resolved "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-4.0.2.tgz" + integrity sha512-RrERod97Dnwqq49WNz8qo66ps0swYZDSb6rM57kN2J+aoyEAJfZ6bMx0sx/F9TIEX0xthPGCmeyiam/jXif0eA== + dependencies: + has "^1.0.0" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + +postcss-normalize-timing-functions@^4.0.2: + version "4.0.2" + resolved "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-4.0.2.tgz" + integrity sha512-acwJY95edP762e++00Ehq9L4sZCEcOPyaHwoaFOhIwWCDfik6YvqsYNxckee65JHLKzuNSSmAdxwD2Cud1Z54A== + dependencies: + cssnano-util-get-match "^4.0.0" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + +postcss-normalize-unicode@^4.0.1: + version "4.0.1" + resolved "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-4.0.1.tgz" + integrity sha512-od18Uq2wCYn+vZ/qCOeutvHjB5jm57ToxRaMeNuf0nWVHaP9Hua56QyMF6fs/4FSUnVIw0CBPsU0K4LnBPwYwg== + dependencies: + browserslist "^4.0.0" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + +postcss-normalize-url@^4.0.1: + version "4.0.1" + resolved "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-4.0.1.tgz" + integrity sha512-p5oVaF4+IHwu7VpMan/SSpmpYxcJMtkGppYf0VbdH5B6hN8YNmVyJLuY9FmLQTzY3fag5ESUUHDqM+heid0UVA== + dependencies: + is-absolute-url "^2.0.0" + normalize-url "^3.0.0" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + +postcss-normalize-whitespace@^4.0.2: + version "4.0.2" + resolved "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-4.0.2.tgz" + integrity sha512-tO8QIgrsI3p95r8fyqKV+ufKlSHh9hMJqACqbv2XknufqEDhDvbguXGBBqxw9nsQoXWf0qOqppziKJKHMD4GtA== + dependencies: + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + +postcss-ordered-values@^4.1.2: + version "4.1.2" + resolved "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-4.1.2.tgz" + integrity sha512-2fCObh5UanxvSxeXrtLtlwVThBvHn6MQcu4ksNT2tsaV2Fg76R2CV98W7wNSlX+5/pFwEyaDwKLLoEV7uRybAw== + dependencies: + cssnano-util-get-arguments "^4.0.0" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + +postcss-reduce-initial@^4.0.3: + version "4.0.3" + resolved "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-4.0.3.tgz" + integrity sha512-gKWmR5aUulSjbzOfD9AlJiHCGH6AEVLaM0AV+aSioxUDd16qXP1PCh8d1/BGVvpdWn8k/HiK7n6TjeoXN1F7DA== + dependencies: + browserslist "^4.0.0" + caniuse-api "^3.0.0" + has "^1.0.0" + postcss "^7.0.0" + +postcss-reduce-transforms@^4.0.2: + version "4.0.2" + resolved "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-4.0.2.tgz" + integrity sha512-EEVig1Q2QJ4ELpJXMZR8Vt5DQx8/mo+dGWSR7vWXqcob2gQLyQGsionYcGKATXvQzMPn6DSN1vTN7yFximdIAg== + dependencies: + cssnano-util-get-match "^4.0.0" + has "^1.0.0" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + +postcss-selector-parser@^3.0.0: + version "3.1.2" + resolved "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.2.tgz" + integrity sha512-h7fJ/5uWuRVyOtkO45pnt1Ih40CEleeyCHzipqAZO2e5H20g25Y48uYnFUiShvY4rZWNJ/Bib/KVPmanaCtOhA== + dependencies: + dot-prop "^5.2.0" + indexes-of "^1.0.1" + uniq "^1.0.1" + +postcss-selector-parser@^6.0.0, postcss-selector-parser@^6.0.2: + version "6.0.9" + resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.0.9.tgz#ee71c3b9ff63d9cd130838876c13a2ec1a992b2f" + integrity sha512-UO3SgnZOVTwu4kyLR22UQ1xZh086RyNZppb7lLAKBFK8a32ttG5i87Y/P3+2bRSjZNyJ1B7hfFNo273tKe9YxQ== + dependencies: + cssesc "^3.0.0" + util-deprecate "^1.0.2" + +postcss-svgo@^4.0.3: + version "4.0.3" + resolved "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-4.0.3.tgz" + integrity sha512-NoRbrcMWTtUghzuKSoIm6XV+sJdvZ7GZSc3wdBN0W19FTtp2ko8NqLsgoh/m9CzNhU3KLPvQmjIwtaNFkaFTvw== + dependencies: + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + svgo "^1.0.0" + +postcss-unique-selectors@^4.0.1: + version "4.0.1" + resolved "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-4.0.1.tgz" + integrity sha512-+JanVaryLo9QwZjKrmJgkI4Fn8SBgRO6WXQBJi7KiAVPlmxikB5Jzc4EvXMT2H0/m0RjrVVm9rGNhZddm/8Spg== + dependencies: + alphanum-sort "^1.0.0" + postcss "^7.0.0" + uniqs "^2.0.0" + +postcss-value-parser@^3.0.0, postcss-value-parser@^3.2.3: + version "3.3.1" + resolved "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz" + integrity sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ== + +postcss-value-parser@^4.0.2, postcss-value-parser@^4.0.3, postcss-value-parser@^4.1.0: + version "4.2.0" + resolved "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz" + integrity sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ== + +postcss@7.0.21: + version "7.0.21" + resolved "https://registry.npmjs.org/postcss/-/postcss-7.0.21.tgz" + integrity sha512-uIFtJElxJo29QC753JzhidoAhvp/e/Exezkdhfmt8AymWT6/5B7W1WmponYWkHk2eg6sONyTch0A3nkMPun3SQ== + dependencies: + chalk "^2.4.2" + source-map "^0.6.1" + supports-color "^6.1.0" + +postcss@7.0.31, postcss@^7.0.0, postcss@^7.0.1, postcss@^7.0.14, postcss@^7.0.27, postcss@^7.0.30, postcss@^7.0.5, postcss@^7.0.6: + version "7.0.31" + resolved "https://registry.npmjs.org/postcss/-/postcss-7.0.31.tgz" + integrity sha512-a937VDHE1ftkjk+8/7nj/mrjtmkn69xxzJgRETXdAUU+IgOYPQNJF17haGWbeDxSyk++HA14UA98FurvPyBJOA== + dependencies: + chalk "^2.4.2" + source-map "^0.6.1" + supports-color "^6.1.0" + +postcss@^7.0.32: + version "7.0.39" + resolved "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz" + integrity sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA== + dependencies: + picocolors "^0.2.1" + source-map "^0.6.1" + +prepend-http@^1.0.0: + version "1.0.4" + resolved "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz" + integrity sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw= + +process-nextick-args@~2.0.0: + version "2.0.1" + resolved "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz" + integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== + +process@^0.11.1, process@^0.11.10: + version "0.11.10" + resolved "https://registry.npmjs.org/process/-/process-0.11.10.tgz" + integrity sha1-czIwDoQBYb2j5podHZGn1LwW8YI= + +promise-inflight@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz" + integrity sha1-mEcocL8igTL8vdhoEputEsPAKeM= + +promise-retry@^1.1.1: + version "1.1.1" + resolved "https://registry.npmjs.org/promise-retry/-/promise-retry-1.1.1.tgz" + integrity sha1-ZznpaOMFHaIM5kl/srUPaRHfPW0= + dependencies: + err-code "^1.0.0" + retry "^0.10.0" + +protoduck@^5.0.1: + version "5.0.1" + resolved "https://registry.npmjs.org/protoduck/-/protoduck-5.0.1.tgz" + integrity sha512-WxoCeDCoCBY55BMvj4cAEjdVUFGRWed9ZxPlqTKYyw1nDDTQ4pqmnIMAGfJlg7Dx35uB/M+PHJPTmGOvaCaPTg== + dependencies: + genfun "^5.0.0" + +protractor@~7.0.0: + version "7.0.0" + resolved "https://registry.npmjs.org/protractor/-/protractor-7.0.0.tgz" + integrity sha512-UqkFjivi4GcvUQYzqGYNe0mLzfn5jiLmO8w9nMhQoJRLhy2grJonpga2IWhI6yJO30LibWXJJtA4MOIZD2GgZw== + dependencies: + "@types/q" "^0.0.32" + "@types/selenium-webdriver" "^3.0.0" + blocking-proxy "^1.0.0" + browserstack "^1.5.1" + chalk "^1.1.3" + glob "^7.0.3" + jasmine "2.8.0" + jasminewd2 "^2.1.0" + q "1.4.1" + saucelabs "^1.5.0" + selenium-webdriver "3.6.0" + source-map-support "~0.4.0" + webdriver-js-extender "2.1.0" + webdriver-manager "^12.1.7" + yargs "^15.3.1" + +proxy-addr@~2.0.5: + version "2.0.7" + resolved "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz" + integrity sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg== + dependencies: + forwarded "0.2.0" + ipaddr.js "1.9.1" + +prr@~1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz" + integrity sha1-0/wRS6BplaRexok/SEzrHXj19HY= + +psl@^1.1.28: + version "1.8.0" + resolved "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz" + integrity sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ== + +public-encrypt@^4.0.0: + version "4.0.3" + resolved "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz" + integrity sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q== + dependencies: + bn.js "^4.1.0" + browserify-rsa "^4.0.0" + create-hash "^1.1.0" + parse-asn1 "^5.0.0" + randombytes "^2.0.1" + safe-buffer "^5.1.2" + +pump@^2.0.0: + version "2.0.1" + resolved "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz" + integrity sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA== + dependencies: + end-of-stream "^1.1.0" + once "^1.3.1" + +pump@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz" + integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww== + dependencies: + end-of-stream "^1.1.0" + once "^1.3.1" + +pumpify@^1.3.3: + version "1.5.1" + resolved "https://registry.npmjs.org/pumpify/-/pumpify-1.5.1.tgz" + integrity sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ== + dependencies: + duplexify "^3.6.0" + inherits "^2.0.3" + pump "^2.0.0" + +punycode@1.3.2: + version "1.3.2" + resolved "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz" + integrity sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0= + +punycode@^1.2.4: + version "1.4.1" + resolved "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz" + integrity sha1-wNWmOycYgArY4esPpSachN1BhF4= + +punycode@^2.1.0, punycode@^2.1.1: + version "2.1.1" + resolved "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz" + integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== + +q@1.4.1, q@^1.4.1: + version "1.4.1" + resolved "https://registry.npmjs.org/q/-/q-1.4.1.tgz" + integrity sha1-VXBbzZPF82c1MMLCy8DCs63cKG4= + +q@^1.1.2: + version "1.5.1" + resolved "https://registry.npmjs.org/q/-/q-1.5.1.tgz" + integrity sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc= + +qjobs@^1.2.0: + version "1.2.0" + resolved "https://registry.npmjs.org/qjobs/-/qjobs-1.2.0.tgz" + integrity sha512-8YOJEHtxpySA3fFDyCRxA+UUV+fA+rTWnuWvylOK/NCjhY+b4ocCtmu8TtsWb+mYeU+GCHf/S66KZF/AsteKHg== + +qs@6.7.0, qs@^6.5.1: + version "6.7.0" + resolved "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz" + integrity sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ== + +qs@~6.5.2: + version "6.5.2" + resolved "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz" + integrity sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA== + +query-string@^4.1.0: + version "4.3.4" + resolved "https://registry.npmjs.org/query-string/-/query-string-4.3.4.tgz" + integrity sha1-u7aTucqRXCMlFbIosaArYJBD2+s= + dependencies: + object-assign "^4.1.0" + strict-uri-encode "^1.0.0" + +querystring-es3@^0.2.0: + version "0.2.1" + resolved "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz" + integrity sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM= + +querystring@0.2.0: + version "0.2.0" + resolved "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz" + integrity sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA= + +querystringify@^2.1.1: + version "2.2.0" + resolved "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz" + integrity sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ== + +queue-microtask@^1.2.2: + version "1.2.3" + resolved "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz" + integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== + +random-words@^1.1.0: + version "1.1.1" + resolved "https://registry.npmjs.org/random-words/-/random-words-1.1.1.tgz" + integrity sha512-Rdk5EoQePyt9Tz3RjeMELi2BSaCI+jDiOkBr4U+3fyBRiiW3qqEuaegGAUMOZ4yGWlQscFQGqQpdic3mAbNkrw== + dependencies: + mocha "^7.1.1" + +randombytes@^2.0.0, randombytes@^2.0.1, randombytes@^2.0.5, randombytes@^2.1.0: + version "2.1.0" + resolved "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz" + integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ== + dependencies: + safe-buffer "^5.1.0" + +randomfill@^1.0.3: + version "1.0.4" + resolved "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz" + integrity sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw== + dependencies: + randombytes "^2.0.5" + safe-buffer "^5.1.0" + +range-parser@^1.2.1, range-parser@~1.2.1: + version "1.2.1" + resolved "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz" + integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg== + +raw-body@2.4.0: + version "2.4.0" + resolved "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz" + integrity sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q== + dependencies: + bytes "3.1.0" + http-errors "1.7.2" + iconv-lite "0.4.24" + unpipe "1.0.0" + +raw-loader@4.0.1: + version "4.0.1" + resolved "https://registry.npmjs.org/raw-loader/-/raw-loader-4.0.1.tgz" + integrity sha512-baolhQBSi3iNh1cglJjA0mYzga+wePk7vdEX//1dTFd+v4TsQlQE0jitJSNF1OIP82rdYulH7otaVmdlDaJ64A== + dependencies: + loader-utils "^2.0.0" + schema-utils "^2.6.5" + +read-cache@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz" + integrity sha1-5mTvMRYRZsl1HNvo28+GtftY93Q= + dependencies: + pify "^2.3.0" + +read-package-json@^2.0.0: + version "2.1.2" + resolved "https://registry.npmjs.org/read-package-json/-/read-package-json-2.1.2.tgz" + integrity sha512-D1KmuLQr6ZSJS0tW8hf3WGpRlwszJOXZ3E8Yd/DNRaM5d+1wVRZdHlpGBLAuovjr28LbWvjpWkBHMxpRGGjzNA== + dependencies: + glob "^7.1.1" + json-parse-even-better-errors "^2.3.0" + normalize-package-data "^2.0.0" + npm-normalize-package-bin "^1.0.0" + +read-package-tree@5.3.1: + version "5.3.1" + resolved "https://registry.npmjs.org/read-package-tree/-/read-package-tree-5.3.1.tgz" + integrity sha512-mLUDsD5JVtlZxjSlPPx1RETkNjjvQYuweKwNVt1Sn8kP5Jh44pvYuUHCp6xSVDZWbNxVxG5lyZJ921aJH61sTw== + dependencies: + read-package-json "^2.0.0" + readdir-scoped-modules "^1.0.0" + util-promisify "^2.1.0" + +"readable-stream@1 || 2", readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.3.3, readable-stream@^2.3.5, readable-stream@^2.3.6, readable-stream@~2.3.6: + version "2.3.7" + resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz" + integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw== + dependencies: + core-util-is "~1.0.0" + inherits "~2.0.3" + isarray "~1.0.0" + process-nextick-args "~2.0.0" + safe-buffer "~5.1.1" + string_decoder "~1.1.1" + util-deprecate "~1.0.1" + +readable-stream@^3.0.6, readable-stream@^3.4.0, readable-stream@^3.6.0: + version "3.6.0" + resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz" + integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA== + dependencies: + inherits "^2.0.3" + string_decoder "^1.1.1" + util-deprecate "^1.0.1" + +readdir-scoped-modules@^1.0.0: + version "1.1.0" + resolved "https://registry.npmjs.org/readdir-scoped-modules/-/readdir-scoped-modules-1.1.0.tgz" + integrity sha512-asaikDeqAQg7JifRsZn1NJZXo9E+VwlyCfbkZhwyISinqk5zNS6266HS5kah6P0SaQKGF6SkNnZVHUzHFYxYDw== + dependencies: + debuglog "^1.0.1" + dezalgo "^1.0.0" + graceful-fs "^4.1.2" + once "^1.3.0" + +readdirp@^2.2.1: + version "2.2.1" + resolved "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz" + integrity sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ== + dependencies: + graceful-fs "^4.1.11" + micromatch "^3.1.10" + readable-stream "^2.0.2" + +readdirp@~3.2.0: + version "3.2.0" + resolved "https://registry.npmjs.org/readdirp/-/readdirp-3.2.0.tgz" + integrity sha512-crk4Qu3pmXwgxdSgGhgA/eXiJAPQiX4GMOZZMXnqKxHX7TaoL+3gQVo/WeuAiogr07DpnfjIMpXXa+PAIvwPGQ== + dependencies: + picomatch "^2.0.4" + +readdirp@~3.6.0: + version "3.6.0" + resolved "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz" + integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA== + dependencies: + picomatch "^2.2.1" + +redux-logger@^3.0.6: + version "3.0.6" + resolved "https://registry.npmjs.org/redux-logger/-/redux-logger-3.0.6.tgz" + integrity sha1-91VZZvMJjzyIYExEnPC69XeCdL8= + dependencies: + deep-diff "^0.3.5" + +redux@4.0.1: + version "4.0.1" + resolved "https://registry.npmjs.org/redux/-/redux-4.0.1.tgz" + integrity sha512-R7bAtSkk7nY6O/OYMVR9RiBI+XghjF9rlbl5806HJbQph0LJVHZrU5oaO4q70eUKiqMRqm4y07KLTlMZ2BlVmg== + dependencies: + loose-envify "^1.4.0" + symbol-observable "^1.2.0" + +reflect-metadata@^0.1.2: + version "0.1.13" + resolved "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.1.13.tgz" + integrity sha512-Ts1Y/anZELhSsjMcU605fU9RE4Oi3p5ORujwbIKXfWa+0Zxs510Qrmrce5/Jowq3cHSZSJqBjypxmHarc+vEWg== + +regenerate-unicode-properties@^9.0.0: + version "9.0.0" + resolved "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-9.0.0.tgz" + integrity sha512-3E12UeNSPfjrgwjkR81m5J7Aw/T55Tu7nUyZVQYCKEOs+2dkxEY+DpPtZzO4YruuiPb7NkYLVcyJC4+zCbk5pA== + dependencies: + regenerate "^1.4.2" + +regenerate@^1.4.2: + version "1.4.2" + resolved "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz" + integrity sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A== + +regenerator-runtime@0.13.5: + version "0.13.5" + resolved "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.5.tgz" + integrity sha512-ZS5w8CpKFinUzOwW3c83oPeVXoNsrLsaCoLtJvAClH135j/R77RuymhiSErhm2lKcwSCIpmvIWSbDkIfAqKQlA== + +regenerator-runtime@^0.13.4: + version "0.13.9" + resolved "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz" + integrity sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA== + +regenerator-transform@^0.14.2: + version "0.14.5" + resolved "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.14.5.tgz" + integrity sha512-eOf6vka5IO151Jfsw2NO9WpGX58W6wWmefK3I1zEGr0lOD0u8rwPaNqQL1aRxUaxLeKO3ArNh3VYg1KbaD+FFw== + dependencies: + "@babel/runtime" "^7.8.4" + +regex-not@^1.0.0, regex-not@^1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz" + integrity sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A== + dependencies: + extend-shallow "^3.0.2" + safe-regex "^1.1.0" + +regex-parser@2.2.10: + version "2.2.10" + resolved "https://registry.npmjs.org/regex-parser/-/regex-parser-2.2.10.tgz" + integrity sha512-8t6074A68gHfU8Neftl0Le6KTDwfGAj7IyjPIMSfikI2wJUTHDMaIq42bUsfVnj8mhx0R+45rdUXHGpN164avA== + +regexp.prototype.flags@^1.2.0: + version "1.3.1" + resolved "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.3.1.tgz" + integrity sha512-JiBdRBq91WlY7uRJ0ds7R+dU02i6LKi8r3BuQhNXn+kmeLN+EfHhfjqMRis1zJxnlu88hq/4dx0P2OP3APRTOA== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.3" + +regexpu-core@^4.7.1: + version "4.8.0" + resolved "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.8.0.tgz" + integrity sha512-1F6bYsoYiz6is+oz70NWur2Vlh9KWtswuRuzJOfeYUrfPX2o8n74AnUVaOGDbUqVGO9fNHu48/pjJO4sNVwsOg== + dependencies: + regenerate "^1.4.2" + regenerate-unicode-properties "^9.0.0" + regjsgen "^0.5.2" + regjsparser "^0.7.0" + unicode-match-property-ecmascript "^2.0.0" + unicode-match-property-value-ecmascript "^2.0.0" + +regjsgen@^0.5.2: + version "0.5.2" + resolved "https://registry.npmjs.org/regjsgen/-/regjsgen-0.5.2.tgz" + integrity sha512-OFFT3MfrH90xIW8OOSyUrk6QHD5E9JOTeGodiJeBS3J6IwlgzJMNE/1bZklWz5oTg+9dCMyEetclvCVXOPoN3A== + +regjsparser@^0.7.0: + version "0.7.0" + resolved "https://registry.npmjs.org/regjsparser/-/regjsparser-0.7.0.tgz" + integrity sha512-A4pcaORqmNMDVwUjWoTzuhwMGpP+NykpfqAsEgI1FSH/EzC7lrN5TMd+kN8YCovX+jMpu8eaqXgXPCa0g8FQNQ== + dependencies: + jsesc "~0.5.0" + +remove-trailing-separator@^1.0.1: + version "1.1.0" + resolved "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz" + integrity sha1-wkvOKig62tW8P1jg1IJJuSN52O8= + +repeat-element@^1.1.2: + version "1.1.4" + resolved "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.4.tgz" + integrity sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ== + +repeat-string@^1.6.1: + version "1.6.1" + resolved "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz" + integrity sha1-jcrkcOHIirwtYA//Sndihtp15jc= + +request@^2.87.0, request@^2.88.2: + version "2.88.2" + resolved "https://registry.npmjs.org/request/-/request-2.88.2.tgz" + integrity sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw== + dependencies: + aws-sign2 "~0.7.0" + aws4 "^1.8.0" + caseless "~0.12.0" + combined-stream "~1.0.6" + extend "~3.0.2" + forever-agent "~0.6.1" + form-data "~2.3.2" + har-validator "~5.1.3" + http-signature "~1.2.0" + is-typedarray "~1.0.0" + isstream "~0.1.2" + json-stringify-safe "~5.0.1" + mime-types "~2.1.19" + oauth-sign "~0.9.0" + performance-now "^2.1.0" + qs "~6.5.2" + safe-buffer "^5.1.2" + tough-cookie "~2.5.0" + tunnel-agent "^0.6.0" + uuid "^3.3.2" + +require-directory@^2.1.1: + version "2.1.1" + resolved "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz" + integrity sha1-jGStX9MNqxyXbiNE/+f3kqam30I= + +require-from-string@^2.0.2: + version "2.0.2" + resolved "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz" + integrity sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw== + +require-main-filename@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz" + integrity sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg== + +requires-port@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz" + integrity sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8= + +resolve-cwd@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-2.0.0.tgz" + integrity sha1-AKn3OHVW4nA46uIyyqNypqWbZlo= + dependencies: + resolve-from "^3.0.0" + +resolve-from@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz" + integrity sha1-six699nWiBvItuZTM17rywoYh0g= + +resolve-url-loader@3.1.1: + version "3.1.1" + resolved "https://registry.npmjs.org/resolve-url-loader/-/resolve-url-loader-3.1.1.tgz" + integrity sha512-K1N5xUjj7v0l2j/3Sgs5b8CjrrgtC70SmdCuZiJ8tSyb5J+uk3FoeZ4b7yTnH6j7ngI+Bc5bldHJIa8hYdu2gQ== + dependencies: + adjust-sourcemap-loader "2.0.0" + camelcase "5.3.1" + compose-function "3.0.3" + convert-source-map "1.7.0" + es6-iterator "2.0.3" + loader-utils "1.2.3" + postcss "7.0.21" + rework "1.0.1" + rework-visit "1.0.0" + source-map "0.6.1" + +resolve-url@^0.2.1: + version "0.2.1" + resolved "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz" + integrity sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo= + +resolve@^1.1.7, resolve@^1.10.0, resolve@^1.3.2, resolve@^1.8.1: + version "1.20.0" + resolved "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz" + integrity sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A== + dependencies: + is-core-module "^2.2.0" + path-parse "^1.0.6" + +restore-cursor@^3.1.0: + version "3.1.0" + resolved "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz" + integrity sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA== + dependencies: + onetime "^5.1.0" + signal-exit "^3.0.2" + +ret@~0.1.10: + version "0.1.15" + resolved "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz" + integrity sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg== + +retry@^0.10.0: + version "0.10.1" + resolved "https://registry.npmjs.org/retry/-/retry-0.10.1.tgz" + integrity sha1-52OI0heZLCUnUCQdPTlW/tmNj/Q= + +retry@^0.12.0: + version "0.12.0" + resolved "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz" + integrity sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs= + +reusify@^1.0.4: + version "1.0.4" + resolved "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz" + integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== + +rework-visit@1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/rework-visit/-/rework-visit-1.0.0.tgz" + integrity sha1-mUWygD8hni96ygCtuLyfZA+ELJo= + +rework@1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/rework/-/rework-1.0.1.tgz" + integrity sha1-MIBqhBNCtUUQqkEQhQzUhTQUSqc= + dependencies: + convert-source-map "^0.3.3" + css "^2.0.0" + +rfdc@^1.1.4: + version "1.3.0" + resolved "https://registry.npmjs.org/rfdc/-/rfdc-1.3.0.tgz" + integrity sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA== + +rgb-regex@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/rgb-regex/-/rgb-regex-1.0.1.tgz" + integrity sha1-wODWiC3w4jviVKR16O3UGRX+rrE= + +rgba-regex@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/rgba-regex/-/rgba-regex-1.0.0.tgz" + integrity sha1-QzdOLiyglosO8VI0YLfXMP8i7rM= + +rimraf@3.0.2, rimraf@^3.0.0, rimraf@^3.0.2: + version "3.0.2" + resolved "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz" + integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== + dependencies: + glob "^7.1.3" + +rimraf@^2.2.8, rimraf@^2.5.2, rimraf@^2.5.4, rimraf@^2.6.2, rimraf@^2.6.3: + version "2.7.1" + resolved "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz" + integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w== + dependencies: + glob "^7.1.3" + +ripemd160@^2.0.0, ripemd160@^2.0.1: + version "2.0.2" + resolved "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz" + integrity sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA== + dependencies: + hash-base "^3.0.0" + inherits "^2.0.1" + +rollup@2.10.9: + version "2.10.9" + resolved "https://registry.npmjs.org/rollup/-/rollup-2.10.9.tgz" + integrity sha512-dY/EbjiWC17ZCUSyk14hkxATAMAShkMsD43XmZGWjLrgFj15M3Dw2kEkA9ns64BiLFm9PKN6vTQw8neHwK74eg== + optionalDependencies: + fsevents "~2.1.2" + +run-async@^2.4.0: + version "2.4.1" + resolved "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz" + integrity sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ== + +run-parallel@^1.1.9: + version "1.2.0" + resolved "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz" + integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== + dependencies: + queue-microtask "^1.2.2" + +run-queue@^1.0.0, run-queue@^1.0.3: + version "1.0.3" + resolved "https://registry.npmjs.org/run-queue/-/run-queue-1.0.3.tgz" + integrity sha1-6Eg5bwV9Ij8kOGkkYY4laUFh7Ec= + dependencies: + aproba "^1.1.1" + +rxjs@6.5.5: + version "6.5.5" + resolved "https://registry.npmjs.org/rxjs/-/rxjs-6.5.5.tgz" + integrity sha512-WfQI+1gohdf0Dai/Bbmk5L5ItH5tYqm3ki2c5GdWhKjalzjg93N3avFjVStyZZz+A2Em+ZxKH5bNghw9UeylGQ== + dependencies: + tslib "^1.9.0" + +rxjs@6.6.2: + version "6.6.2" + resolved "https://registry.npmjs.org/rxjs/-/rxjs-6.6.2.tgz" + integrity sha512-BHdBMVoWC2sL26w//BCu3YzKT4s2jip/WhwsGEDmeKYBhKDZeYezVUnHatYB7L85v5xs0BAQmg6BEYJEKxBabg== + dependencies: + tslib "^1.9.0" + +rxjs@6.6.7, rxjs@^6.5.4, rxjs@^6.6.0: + version "6.6.7" + resolved "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz" + integrity sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ== + dependencies: + tslib "^1.9.0" + +rxjs@^5.0.1: + version "5.5.12" + resolved "https://registry.npmjs.org/rxjs/-/rxjs-5.5.12.tgz" + integrity sha512-xx2itnL5sBbqeeiVgNPVuQQ1nC8Jp2WfNJhXWHmElW9YmrpS9UVnNzhP3EH3HFqexO5Tlp8GhYY+WEcqcVMvGw== + dependencies: + symbol-observable "1.0.1" + +safe-buffer@5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: + version "5.1.2" + resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz" + integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== + +safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@^5.2.0, safe-buffer@^5.2.1, safe-buffer@~5.2.0: + version "5.2.1" + resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz" + integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== + +safe-regex@^1.1.0: + version "1.1.0" + resolved "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz" + integrity sha1-QKNmnzsHfR6UPURinhV91IAjvy4= + dependencies: + ret "~0.1.10" + +"safer-buffer@>= 2.1.2 < 3", "safer-buffer@>= 2.1.2 < 3.0.0", safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@^2.1.2, safer-buffer@~2.1.0: + version "2.1.2" + resolved "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz" + integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== + +sass-loader@8.0.2: + version "8.0.2" + resolved "https://registry.npmjs.org/sass-loader/-/sass-loader-8.0.2.tgz" + integrity sha512-7o4dbSK8/Ol2KflEmSco4jTjQoV988bM82P9CZdmo9hR3RLnvNc0ufMNdMrB0caq38JQ/FgF4/7RcbcfKzxoFQ== + dependencies: + clone-deep "^4.0.1" + loader-utils "^1.2.3" + neo-async "^2.6.1" + schema-utils "^2.6.1" + semver "^6.3.0" + +sass@1.26.5: + version "1.26.5" + resolved "https://registry.npmjs.org/sass/-/sass-1.26.5.tgz" + integrity sha512-FG2swzaZUiX53YzZSjSakzvGtlds0lcbF+URuU9mxOv7WBh7NhXEVDa4kPKN4hN6fC2TkOTOKqiqp6d53N9X5Q== + dependencies: + chokidar ">=2.0.0 <4.0.0" + +saucelabs@^1.5.0: + version "1.5.0" + resolved "https://registry.npmjs.org/saucelabs/-/saucelabs-1.5.0.tgz" + integrity sha512-jlX3FGdWvYf4Q3LFfFWS1QvPg3IGCGWxIc8QBFdPTbpTJnt/v17FHXYVAn7C8sHf1yUXo2c7yIM0isDryfYtHQ== + dependencies: + https-proxy-agent "^2.2.1" + +sax@>=0.6.0, sax@~1.2.4: + version "1.2.4" + resolved "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz" + integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw== + +schema-utils@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz" + integrity sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g== + dependencies: + ajv "^6.1.0" + ajv-errors "^1.0.0" + ajv-keywords "^3.1.0" + +schema-utils@^2.6.1, schema-utils@^2.6.4, schema-utils@^2.6.5, schema-utils@^2.6.6, schema-utils@^2.7.0: + version "2.7.1" + resolved "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.1.tgz" + integrity sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg== + dependencies: + "@types/json-schema" "^7.0.5" + ajv "^6.12.4" + ajv-keywords "^3.5.2" + +schema-utils@^3.1.1: + version "3.1.1" + resolved "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz" + integrity sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw== + dependencies: + "@types/json-schema" "^7.0.8" + ajv "^6.12.5" + ajv-keywords "^3.5.2" + +select-hose@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz" + integrity sha1-Yl2GWPhlr0Psliv8N2o3NZpJlMo= + +selenium-webdriver@3.6.0, selenium-webdriver@^3.0.1: + version "3.6.0" + resolved "https://registry.npmjs.org/selenium-webdriver/-/selenium-webdriver-3.6.0.tgz" + integrity sha512-WH7Aldse+2P5bbFBO4Gle/nuQOdVwpHMTL6raL3uuBj/vPG07k6uzt3aiahu352ONBr5xXh0hDlM3LhtXPOC4Q== + dependencies: + jszip "^3.1.3" + rimraf "^2.5.4" + tmp "0.0.30" + xml2js "^0.4.17" + +selfsigned@^1.10.7: + version "1.10.11" + resolved "https://registry.npmjs.org/selfsigned/-/selfsigned-1.10.11.tgz" + integrity sha512-aVmbPOfViZqOZPgRBT0+3u4yZFHpmnIghLMlAcb5/xhp5ZtB/RVnKhz5vl2M32CLXAqR4kha9zfhNg0Lf/sxKA== + dependencies: + node-forge "^0.10.0" + +semver-dsl@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/semver-dsl/-/semver-dsl-1.0.1.tgz" + integrity sha1-02eN5VVeimH2Ke7QJTZq5fJzQKA= + dependencies: + semver "^5.3.0" + +semver-intersect@1.4.0: + version "1.4.0" + resolved "https://registry.npmjs.org/semver-intersect/-/semver-intersect-1.4.0.tgz" + integrity sha512-d8fvGg5ycKAq0+I6nfWeCx6ffaWJCsBYU0H2Rq56+/zFePYfT8mXkB3tWBSjR5BerkHNZ5eTPIk1/LBYas35xQ== + dependencies: + semver "^5.0.0" + +"semver@2 || 3 || 4 || 5", semver@^5.0.0, semver@^5.3.0, semver@^5.4.1, semver@^5.5.0, semver@^5.5.1, semver@^5.6.0, semver@^5.7.0: + version "5.7.1" + resolved "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz" + integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== + +semver@7.0.0: + version "7.0.0" + resolved "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz" + integrity sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A== + +semver@7.3.2: + version "7.3.2" + resolved "https://registry.npmjs.org/semver/-/semver-7.3.2.tgz" + integrity sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ== + +semver@^6.0.0, semver@^6.3.0: + version "6.3.0" + resolved "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz" + integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== + +semver@^7.0.0, semver@^7.1.1, semver@^7.3.5: + version "7.3.5" + resolved "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz" + integrity sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ== + dependencies: + lru-cache "^6.0.0" + +send@0.17.1: + version "0.17.1" + resolved "https://registry.npmjs.org/send/-/send-0.17.1.tgz" + integrity sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg== + dependencies: + debug "2.6.9" + depd "~1.1.2" + destroy "~1.0.4" + encodeurl "~1.0.2" + escape-html "~1.0.3" + etag "~1.8.1" + fresh "0.5.2" + http-errors "~1.7.2" + mime "1.6.0" + ms "2.1.1" + on-finished "~2.3.0" + range-parser "~1.2.1" + statuses "~1.5.0" + +serialize-javascript@^3.0.0: + version "3.1.0" + resolved "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-3.1.0.tgz" + integrity sha512-JIJT1DGiWmIKhzRsG91aS6Ze4sFUrYbltlkg2onR5OrnNM02Kl/hnY/T4FN2omvyeBbQmMJv+K4cPOpGzOTFBg== + dependencies: + randombytes "^2.1.0" + +serialize-javascript@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-4.0.0.tgz" + integrity sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw== + dependencies: + randombytes "^2.1.0" + +serialize-javascript@^6.0.0: + version "6.0.0" + resolved "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz" + integrity sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag== + dependencies: + randombytes "^2.1.0" + +serve-index@^1.9.1: + version "1.9.1" + resolved "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz" + integrity sha1-03aNabHn2C5c4FD/9bRTvqEqkjk= + dependencies: + accepts "~1.3.4" + batch "0.6.1" + debug "2.6.9" + escape-html "~1.0.3" + http-errors "~1.6.2" + mime-types "~2.1.17" + parseurl "~1.3.2" + +serve-static@1.14.1: + version "1.14.1" + resolved "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz" + integrity sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg== + dependencies: + encodeurl "~1.0.2" + escape-html "~1.0.3" + parseurl "~1.3.3" + send "0.17.1" + +set-blocking@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz" + integrity sha1-BF+XgtARrppoA93TgrJDkrPYkPc= + +set-immediate-shim@~1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz" + integrity sha1-SysbJ+uAip+NzEgaWOXlb1mfP2E= + +set-value@^2.0.0, set-value@^2.0.1: + version "2.0.1" + resolved "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz" + integrity sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw== + dependencies: + extend-shallow "^2.0.1" + is-extendable "^0.1.1" + is-plain-object "^2.0.3" + split-string "^3.0.1" + +setimmediate@^1.0.4: + version "1.0.5" + resolved "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz" + integrity sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU= + +setprototypeof@1.1.0: + version "1.1.0" + resolved "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz" + integrity sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ== + +setprototypeof@1.1.1: + version "1.1.1" + resolved "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz" + integrity sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw== + +sha.js@^2.4.0, sha.js@^2.4.8: + version "2.4.11" + resolved "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz" + integrity sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ== + dependencies: + inherits "^2.0.1" + safe-buffer "^5.0.1" + +shallow-clone@^3.0.0: + version "3.0.1" + resolved "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz" + integrity sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA== + dependencies: + kind-of "^6.0.2" + +shebang-command@^1.2.0: + version "1.2.0" + resolved "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz" + integrity sha1-RKrGW2lbAzmJaMOfNj/uXer98eo= + dependencies: + shebang-regex "^1.0.0" + +shebang-regex@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz" + integrity sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM= + +side-channel@^1.0.4: + version "1.0.4" + resolved "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz" + integrity sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw== + dependencies: + call-bind "^1.0.0" + get-intrinsic "^1.0.2" + object-inspect "^1.9.0" + +signal-exit@^3.0.0, signal-exit@^3.0.2: + version "3.0.6" + resolved "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.6.tgz" + integrity sha512-sDl4qMFpijcGw22U5w63KmD3cZJfBuFlVNbVMKje2keoKML7X2UzWbc4XrmEbDwg0NXJc3yv4/ox7b+JWb57kQ== + +simple-swizzle@^0.2.2: + version "0.2.2" + resolved "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz" + integrity sha1-pNprY1/8zMoz9w0Xy5JZLeleVXo= + dependencies: + is-arrayish "^0.3.1" + +slash@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz" + integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== + +smart-buffer@^4.1.0: + version "4.2.0" + resolved "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz" + integrity sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg== + +snapdragon-node@^2.0.1: + version "2.1.1" + resolved "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz" + integrity sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw== + dependencies: + define-property "^1.0.0" + isobject "^3.0.0" + snapdragon-util "^3.0.1" + +snapdragon-util@^3.0.1: + version "3.0.1" + resolved "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz" + integrity sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ== + dependencies: + kind-of "^3.2.0" + +snapdragon@^0.8.1: + version "0.8.2" + resolved "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz" + integrity sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg== + dependencies: + base "^0.11.1" + debug "^2.2.0" + define-property "^0.2.5" + extend-shallow "^2.0.1" + map-cache "^0.2.2" + source-map "^0.5.6" + source-map-resolve "^0.5.0" + use "^3.1.0" + +socket.io-adapter@~1.1.0: + version "1.1.2" + resolved "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-1.1.2.tgz" + integrity sha512-WzZRUj1kUjrTIrUKpZLEzFZ1OLj5FwLlAFQs9kuZJzJi5DKdU7FsWc36SNmA8iDOtwBQyT8FkrriRM8vXLYz8g== + +socket.io-client@2.4.0: + version "2.4.0" + resolved "https://registry.npmjs.org/socket.io-client/-/socket.io-client-2.4.0.tgz" + integrity sha512-M6xhnKQHuuZd4Ba9vltCLT9oa+YvTsP8j9NcEiLElfIg8KeYPyhWOes6x4t+LTAC8enQbE/995AdTem2uNyKKQ== + dependencies: + backo2 "1.0.2" + component-bind "1.0.0" + component-emitter "~1.3.0" + debug "~3.1.0" + engine.io-client "~3.5.0" + has-binary2 "~1.0.2" + indexof "0.0.1" + parseqs "0.0.6" + parseuri "0.0.6" + socket.io-parser "~3.3.0" + to-array "0.1.4" + +socket.io-parser@~3.3.0: + version "3.3.2" + resolved "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-3.3.2.tgz" + integrity sha512-FJvDBuOALxdCI9qwRrO/Rfp9yfndRtc1jSgVgV8FDraihmSP/MLGD5PEuJrNfjALvcQ+vMDM/33AWOYP/JSjDg== + dependencies: + component-emitter "~1.3.0" + debug "~3.1.0" + isarray "2.0.1" + +socket.io-parser@~3.4.0: + version "3.4.1" + resolved "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-3.4.1.tgz" + integrity sha512-11hMgzL+WCLWf1uFtHSNvliI++tcRUWdoeYuwIl+Axvwy9z2gQM+7nJyN3STj1tLj5JyIUH8/gpDGxzAlDdi0A== + dependencies: + component-emitter "1.2.1" + debug "~4.1.0" + isarray "2.0.1" + +socket.io@^2.3.0: + version "2.4.1" + resolved "https://registry.npmjs.org/socket.io/-/socket.io-2.4.1.tgz" + integrity sha512-Si18v0mMXGAqLqCVpTxBa8MGqriHGQh8ccEOhmsmNS3thNCGBwO8WGrwMibANsWtQQ5NStdZwHqZR3naJVFc3w== + dependencies: + debug "~4.1.0" + engine.io "~3.5.0" + has-binary2 "~1.0.2" + socket.io-adapter "~1.1.0" + socket.io-client "2.4.0" + socket.io-parser "~3.4.0" + +sockjs-client@1.4.0: + version "1.4.0" + resolved "https://registry.npmjs.org/sockjs-client/-/sockjs-client-1.4.0.tgz" + integrity sha512-5zaLyO8/nri5cua0VtOrFXBPK1jbL4+1cebT/mmKA1E1ZXOvJrII75bPu0l0k843G/+iAbhEqzyKr0w/eCCj7g== + dependencies: + debug "^3.2.5" + eventsource "^1.0.7" + faye-websocket "~0.11.1" + inherits "^2.0.3" + json3 "^3.3.2" + url-parse "^1.4.3" + +sockjs@0.3.20: + version "0.3.20" + resolved "https://registry.npmjs.org/sockjs/-/sockjs-0.3.20.tgz" + integrity sha512-SpmVOVpdq0DJc0qArhF3E5xsxvaiqGNb73XfgBpK1y3UD5gs8DSo8aCTsuT5pX8rssdc2NDIzANwP9eCAiSdTA== + dependencies: + faye-websocket "^0.10.0" + uuid "^3.4.0" + websocket-driver "0.6.5" + +socks-proxy-agent@^4.0.0: + version "4.0.2" + resolved "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-4.0.2.tgz" + integrity sha512-NT6syHhI9LmuEMSK6Kd2V7gNv5KFZoLE7V5udWmn0de+3Mkj3UMA/AJPLyeNUVmElCurSHtUdM3ETpR3z770Wg== + dependencies: + agent-base "~4.2.1" + socks "~2.3.2" + +socks@~2.3.2: + version "2.3.3" + resolved "https://registry.npmjs.org/socks/-/socks-2.3.3.tgz" + integrity sha512-o5t52PCNtVdiOvzMry7wU4aOqYWL0PeCXRWBEiJow4/i/wr+wpsJQ9awEu1EonLIqsfGd5qSgDdxEOvCdmBEpA== + dependencies: + ip "1.1.5" + smart-buffer "^4.1.0" + +sort-keys@^1.0.0: + version "1.1.2" + resolved "https://registry.npmjs.org/sort-keys/-/sort-keys-1.1.2.tgz" + integrity sha1-RBttTTRnmPG05J6JIK37oOVD+a0= + dependencies: + is-plain-obj "^1.0.0" + +sort-keys@^5.0.0: + version "5.0.0" + resolved "https://registry.npmjs.org/sort-keys/-/sort-keys-5.0.0.tgz" + integrity sha512-Pdz01AvCAottHTPQGzndktFNdbRA75BgOfeT1hH+AMnJFv8lynkPi42rfeEhpx1saTEI3YNMWxfqu0sFD1G8pw== + dependencies: + is-plain-obj "^4.0.0" + +source-list-map@^2.0.0: + version "2.0.1" + resolved "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.1.tgz" + integrity sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw== + +source-map-loader@1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/source-map-loader/-/source-map-loader-1.0.0.tgz" + integrity sha512-ZayyQCSCrQazN50aCvuS84lJT4xc1ZAcykH5blHaBdVveSwjiFK8UGMPvao0ho54DTb0Jf7m57uRRG/YYUZ2Fg== + dependencies: + data-urls "^2.0.0" + iconv-lite "^0.5.1" + loader-utils "^2.0.0" + schema-utils "^2.6.6" + source-map "^0.6.0" + +source-map-resolve@^0.5.0, source-map-resolve@^0.5.2: + version "0.5.3" + resolved "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz" + integrity sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw== + dependencies: + atob "^2.1.2" + decode-uri-component "^0.2.0" + resolve-url "^0.2.1" + source-map-url "^0.4.0" + urix "^0.1.0" + +source-map-support@0.5.19: + version "0.5.19" + resolved "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz" + integrity sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw== + dependencies: + buffer-from "^1.0.0" + source-map "^0.6.0" + +source-map-support@^0.5.0, source-map-support@^0.5.5, source-map-support@~0.5.12: + version "0.5.21" + resolved "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz" + integrity sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w== + dependencies: + buffer-from "^1.0.0" + source-map "^0.6.0" + +source-map-support@~0.4.0: + version "0.4.18" + resolved "https://registry.npmjs.org/source-map-support/-/source-map-support-0.4.18.tgz" + integrity sha512-try0/JqxPLF9nOjvSta7tVondkP5dwgyLDjVoyMDlmjugT2lRZ1OfsrYTkCd2hkDnJTKRbO/Rl3orm8vlsUzbA== + dependencies: + source-map "^0.5.6" + +source-map-url@^0.4.0: + version "0.4.1" + resolved "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.1.tgz" + integrity sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw== + +source-map@0.6.1, source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.0, source-map@~0.6.1: + version "0.6.1" + resolved "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz" + integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== + +source-map@0.7.3, source-map@^0.7.3: + version "0.7.3" + resolved "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz" + integrity sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ== + +source-map@^0.5.0, source-map@^0.5.6, source-map@^0.5.7: + version "0.5.7" + resolved "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz" + integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w= + +sourcemap-codec@^1.4.4, sourcemap-codec@^1.4.8: + version "1.4.8" + resolved "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz" + integrity sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA== + +spdx-correct@^3.0.0: + version "3.1.1" + resolved "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz" + integrity sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w== + dependencies: + spdx-expression-parse "^3.0.0" + spdx-license-ids "^3.0.0" + +spdx-exceptions@^2.1.0: + version "2.3.0" + resolved "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz" + integrity sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A== + +spdx-expression-parse@^3.0.0: + version "3.0.1" + resolved "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz" + integrity sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q== + dependencies: + spdx-exceptions "^2.1.0" + spdx-license-ids "^3.0.0" + +spdx-license-ids@^3.0.0: + version "3.0.11" + resolved "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.11.tgz" + integrity sha512-Ctl2BrFiM0X3MANYgj3CkygxhRmr9mi6xhejbdO960nF6EDJApTYpn0BQnDKlnNBULKiCN1n3w9EBkHK8ZWg+g== + +spdy-transport@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/spdy-transport/-/spdy-transport-3.0.0.tgz" + integrity sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw== + dependencies: + debug "^4.1.0" + detect-node "^2.0.4" + hpack.js "^2.1.6" + obuf "^1.1.2" + readable-stream "^3.0.6" + wbuf "^1.7.3" + +spdy@^4.0.2: + version "4.0.2" + resolved "https://registry.npmjs.org/spdy/-/spdy-4.0.2.tgz" + integrity sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA== + dependencies: + debug "^4.1.0" + handle-thing "^2.0.0" + http-deceiver "^1.2.7" + select-hose "^2.0.0" + spdy-transport "^3.0.0" + +speed-measure-webpack-plugin@1.3.3: + version "1.3.3" + resolved "https://registry.npmjs.org/speed-measure-webpack-plugin/-/speed-measure-webpack-plugin-1.3.3.tgz" + integrity sha512-2ljD4Ch/rz2zG3HsLsnPfp23osuPBS0qPuz9sGpkNXTN1Ic4M+W9xB8l8rS8ob2cO4b1L+WTJw/0AJwWYVgcxQ== + dependencies: + chalk "^2.0.1" + +split-string@^3.0.1, split-string@^3.0.2: + version "3.1.0" + resolved "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz" + integrity sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw== + dependencies: + extend-shallow "^3.0.0" + +sprintf-js@^1.1.2: + version "1.1.2" + resolved "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.2.tgz" + integrity sha512-VE0SOVEHCk7Qc8ulkWw3ntAzXuqf7S2lvwQaDLRnUeIEaKNQJzV6BwmLKhOqT61aGhfUMrXeaBk+oDGCzvhcug== + +sprintf-js@~1.0.2: + version "1.0.3" + resolved "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz" + integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw= + +sshpk@^1.7.0: + version "1.16.1" + resolved "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz" + integrity sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg== + dependencies: + asn1 "~0.2.3" + assert-plus "^1.0.0" + bcrypt-pbkdf "^1.0.0" + dashdash "^1.12.0" + ecc-jsbn "~0.1.1" + getpass "^0.1.1" + jsbn "~0.1.0" + safer-buffer "^2.0.2" + tweetnacl "~0.14.0" + +ssri@^6.0.0, ssri@^6.0.1: + version "6.0.2" + resolved "https://registry.npmjs.org/ssri/-/ssri-6.0.2.tgz" + integrity sha512-cepbSq/neFK7xB6A50KHN0xHDotYzq58wWCa5LeWqnPrHG8GzfEjO/4O8kpmcGW+oaxkvhEJCWgbgNk4/ZV93Q== + dependencies: + figgy-pudding "^3.5.1" + +ssri@^8.0.0, ssri@^8.0.1: + version "8.0.1" + resolved "https://registry.npmjs.org/ssri/-/ssri-8.0.1.tgz" + integrity sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ== + dependencies: + minipass "^3.1.1" + +stable@^0.1.8: + version "0.1.8" + resolved "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz" + integrity sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w== + +static-extend@^0.1.1: + version "0.1.2" + resolved "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz" + integrity sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY= + dependencies: + define-property "^0.2.5" + object-copy "^0.1.0" + +"statuses@>= 1.4.0 < 2", "statuses@>= 1.5.0 < 2", statuses@~1.5.0: + version "1.5.0" + resolved "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz" + integrity sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow= + +stream-browserify@^2.0.1: + version "2.0.2" + resolved "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.2.tgz" + integrity sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg== + dependencies: + inherits "~2.0.1" + readable-stream "^2.0.2" + +stream-each@^1.1.0: + version "1.2.3" + resolved "https://registry.npmjs.org/stream-each/-/stream-each-1.2.3.tgz" + integrity sha512-vlMC2f8I2u/bZGqkdfLQW/13Zihpej/7PmSiMQsbYddxuTsJp8vRe2x2FvVExZg7FaOds43ROAuFJwPR4MTZLw== + dependencies: + end-of-stream "^1.1.0" + stream-shift "^1.0.0" + +stream-http@^2.7.2: + version "2.8.3" + resolved "https://registry.npmjs.org/stream-http/-/stream-http-2.8.3.tgz" + integrity sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw== + dependencies: + builtin-status-codes "^3.0.0" + inherits "^2.0.1" + readable-stream "^2.3.6" + to-arraybuffer "^1.0.0" + xtend "^4.0.0" + +stream-shift@^1.0.0: + version "1.0.1" + resolved "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.1.tgz" + integrity sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ== + +streamroller@^2.2.4: + version "2.2.4" + resolved "https://registry.npmjs.org/streamroller/-/streamroller-2.2.4.tgz" + integrity sha512-OG79qm3AujAM9ImoqgWEY1xG4HX+Lw+yY6qZj9R1K2mhF5bEmQ849wvrb+4vt4jLMLzwXttJlQbOdPOQVRv7DQ== + dependencies: + date-format "^2.1.0" + debug "^4.1.1" + fs-extra "^8.1.0" + +strict-uri-encode@^1.0.0: + version "1.1.0" + resolved "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz" + integrity sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM= + +"string-width@^1.0.2 || 2": + version "2.1.1" + resolved "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz" + integrity sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw== + dependencies: + is-fullwidth-code-point "^2.0.0" + strip-ansi "^4.0.0" + +string-width@^3.0.0, string-width@^3.1.0: + version "3.1.0" + resolved "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz" + integrity sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w== + dependencies: + emoji-regex "^7.0.1" + is-fullwidth-code-point "^2.0.0" + strip-ansi "^5.1.0" + +string-width@^4.1.0, string-width@^4.2.0: + version "4.2.3" + resolved "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz" + integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== + dependencies: + emoji-regex "^8.0.0" + is-fullwidth-code-point "^3.0.0" + strip-ansi "^6.0.1" + +string.prototype.trimend@^1.0.4: + version "1.0.4" + resolved "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz" + integrity sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.3" + +string.prototype.trimstart@^1.0.4: + version "1.0.4" + resolved "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz" + integrity sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.3" + +string_decoder@^1.0.0, string_decoder@^1.1.1: + version "1.3.0" + resolved "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz" + integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== + dependencies: + safe-buffer "~5.2.0" + +string_decoder@~1.1.1: + version "1.1.1" + resolved "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz" + integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== + dependencies: + safe-buffer "~5.1.0" + +strip-ansi@^3.0.0, strip-ansi@^3.0.1: + version "3.0.1" + resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz" + integrity sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8= + dependencies: + ansi-regex "^2.0.0" + +strip-ansi@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz" + integrity sha1-qEeQIusaw2iocTibY1JixQXuNo8= + dependencies: + ansi-regex "^3.0.0" + +strip-ansi@^5.0.0, strip-ansi@^5.1.0, strip-ansi@^5.2.0: + version "5.2.0" + resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz" + integrity sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA== + dependencies: + ansi-regex "^4.1.0" + +strip-ansi@^6.0.0, strip-ansi@^6.0.1: + version "6.0.1" + resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz" + integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== + dependencies: + ansi-regex "^5.0.1" + +strip-bom@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz" + integrity sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM= + +strip-eof@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz" + integrity sha1-u0P/VZim6wXYm1n80SnJgzE2Br8= + +strip-json-comments@2.0.1, strip-json-comments@^2.0.0: + version "2.0.1" + resolved "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz" + integrity sha1-PFMZQukIwml8DsNEhYwobHygpgo= + +style-loader@1.2.1: + version "1.2.1" + resolved "https://registry.npmjs.org/style-loader/-/style-loader-1.2.1.tgz" + integrity sha512-ByHSTQvHLkWE9Ir5+lGbVOXhxX10fbprhLvdg96wedFZb4NDekDPxVKv5Fwmio+QcMlkkNfuK+5W1peQ5CUhZg== + dependencies: + loader-utils "^2.0.0" + schema-utils "^2.6.6" + +stylehacks@^4.0.0: + version "4.0.3" + resolved "https://registry.npmjs.org/stylehacks/-/stylehacks-4.0.3.tgz" + integrity sha512-7GlLk9JwlElY4Y6a/rmbH2MhVlTyVmiJd1PfTCqFaIBEGMYNsrO/v3SeGTdhBThLg4Z+NbOk/qFMwCa+J+3p/g== + dependencies: + browserslist "^4.0.0" + postcss "^7.0.0" + postcss-selector-parser "^3.0.0" + +stylus-loader@3.0.2: + version "3.0.2" + resolved "https://registry.npmjs.org/stylus-loader/-/stylus-loader-3.0.2.tgz" + integrity sha512-+VomPdZ6a0razP+zinir61yZgpw2NfljeSsdUF5kJuEzlo3khXhY19Fn6l8QQz1GRJGtMCo8nG5C04ePyV7SUA== + dependencies: + loader-utils "^1.0.2" + lodash.clonedeep "^4.5.0" + when "~3.6.x" + +stylus@0.54.7: + version "0.54.7" + resolved "https://registry.npmjs.org/stylus/-/stylus-0.54.7.tgz" + integrity sha512-Yw3WMTzVwevT6ZTrLCYNHAFmanMxdylelL3hkWNgPMeTCpMwpV3nXjpOHuBXtFv7aiO2xRuQS6OoAdgkNcSNug== + dependencies: + css-parse "~2.0.0" + debug "~3.1.0" + glob "^7.1.3" + mkdirp "~0.5.x" + safer-buffer "^2.1.2" + sax "~1.2.4" + semver "^6.0.0" + source-map "^0.7.3" + +superagent@^3.8.3: + version "3.8.3" + resolved "https://registry.npmjs.org/superagent/-/superagent-3.8.3.tgz" + integrity sha512-GLQtLMCoEIK4eDv6OGtkOoSMt3D+oq0y3dsxMuYuDvaNUvuT8eFBuLmfR0iYYzHC1e8hpzC6ZsxbuP6DIalMFA== + dependencies: + component-emitter "^1.2.0" + cookiejar "^2.1.0" + debug "^3.1.0" + extend "^3.0.0" + form-data "^2.3.1" + formidable "^1.2.0" + methods "^1.1.1" + mime "^1.4.1" + qs "^6.5.1" + readable-stream "^2.3.5" + +supports-color@6.0.0: + version "6.0.0" + resolved "https://registry.npmjs.org/supports-color/-/supports-color-6.0.0.tgz" + integrity sha512-on9Kwidc1IUQo+bQdhi8+Tijpo0e1SS6RoGo2guUwn5vdaxw8RXOF9Vb2ws+ihWOmh4JnCJOvaziZWP1VABaLg== + dependencies: + has-flag "^3.0.0" + +supports-color@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz" + integrity sha1-U10EXOa2Nj+kARcIRimZXp3zJMc= + +supports-color@^5.3.0: + version "5.5.0" + resolved "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz" + integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== + dependencies: + has-flag "^3.0.0" + +supports-color@^6.1.0: + version "6.1.0" + resolved "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz" + integrity sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ== + dependencies: + has-flag "^3.0.0" + +supports-color@^7.0.0, supports-color@^7.1.0: + version "7.2.0" + resolved "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz" + integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== + dependencies: + has-flag "^4.0.0" + +svgo@^1.0.0: + version "1.3.2" + resolved "https://registry.npmjs.org/svgo/-/svgo-1.3.2.tgz" + integrity sha512-yhy/sQYxR5BkC98CY7o31VGsg014AKLEPxdfhora76l36hD9Rdy5NZA/Ocn6yayNPgSamYdtX2rFJdcv07AYVw== + dependencies: + chalk "^2.4.1" + coa "^2.0.2" + css-select "^2.0.0" + css-select-base-adapter "^0.1.1" + css-tree "1.0.0-alpha.37" + csso "^4.0.2" + js-yaml "^3.13.1" + mkdirp "~0.5.1" + object.values "^1.1.0" + sax "~1.2.4" + stable "^0.1.8" + unquote "~1.1.1" + util.promisify "~1.0.0" + +symbol-observable@1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/symbol-observable/-/symbol-observable-1.0.1.tgz" + integrity sha1-g0D8RwLDEi310iKI+IKD9RPT/dQ= + +symbol-observable@1.2.0, symbol-observable@^1.2.0: + version "1.2.0" + resolved "https://registry.npmjs.org/symbol-observable/-/symbol-observable-1.2.0.tgz" + integrity sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ== + +tapable@^1.0.0, tapable@^1.1.3: + version "1.1.3" + resolved "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz" + integrity sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA== + +tar@^4.4.10: + version "4.4.19" + resolved "https://registry.npmjs.org/tar/-/tar-4.4.19.tgz" + integrity sha512-a20gEsvHnWe0ygBY8JbxoM4w3SJdhc7ZAuxkLqh+nvNQN2IOt0B5lLgM490X5Hl8FF0dl0tOf2ewFYAlIFgzVA== + dependencies: + chownr "^1.1.4" + fs-minipass "^1.2.7" + minipass "^2.9.0" + minizlib "^1.3.3" + mkdirp "^0.5.5" + safe-buffer "^5.2.1" + yallist "^3.1.1" + +tar@^6.0.2: + version "6.1.11" + resolved "https://registry.npmjs.org/tar/-/tar-6.1.11.tgz" + integrity sha512-an/KZQzQUkZCkuoAA64hM92X0Urb6VpRhAFllDzz44U2mcD5scmT3zBc4VgVpkugF580+DQn8eAFSyoQt0tznA== + dependencies: + chownr "^2.0.0" + fs-minipass "^2.0.0" + minipass "^3.0.0" + minizlib "^2.1.1" + mkdirp "^1.0.3" + yallist "^4.0.0" + +terser-webpack-plugin@3.0.1: + version "3.0.1" + resolved "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-3.0.1.tgz" + integrity sha512-eFDtq8qPUEa9hXcUzTwKXTnugIVtlqc1Z/ZVhG8LmRT3lgRY13+pQTnFLY2N7ATB6TKCHuW/IGjoAnZz9wOIqw== + dependencies: + cacache "^15.0.3" + find-cache-dir "^3.3.1" + jest-worker "^26.0.0" + p-limit "^2.3.0" + schema-utils "^2.6.6" + serialize-javascript "^3.0.0" + source-map "^0.6.1" + terser "^4.6.13" + webpack-sources "^1.4.3" + +terser-webpack-plugin@^1.4.3: + version "1.4.5" + resolved "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-1.4.5.tgz" + integrity sha512-04Rfe496lN8EYruwi6oPQkG0vo8C+HT49X687FZnpPF0qMAIHONI6HEXYPKDOE8e5HjXTyKfqRd/agHtH0kOtw== + dependencies: + cacache "^12.0.2" + find-cache-dir "^2.1.0" + is-wsl "^1.1.0" + schema-utils "^1.0.0" + serialize-javascript "^4.0.0" + source-map "^0.6.1" + terser "^4.1.2" + webpack-sources "^1.4.0" + worker-farm "^1.7.0" + +terser@4.7.0, terser@^4.1.2, terser@^4.6.13: + version "4.7.0" + resolved "https://registry.npmjs.org/terser/-/terser-4.7.0.tgz" + integrity sha512-Lfb0RiZcjRDXCC3OSHJpEkxJ9Qeqs6mp2v4jf2MHfy8vGERmVDuvjXdd/EnP5Deme5F2yBRBymKmKHCBg2echw== + dependencies: + commander "^2.20.0" + source-map "~0.6.1" + source-map-support "~0.5.12" + +through2@^2.0.0: + version "2.0.5" + resolved "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz" + integrity sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ== + dependencies: + readable-stream "~2.3.6" + xtend "~4.0.1" + +"through@>=2.2.7 <3", through@X.X.X, through@^2.3.6: + version "2.3.8" + resolved "https://registry.npmjs.org/through/-/through-2.3.8.tgz" + integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU= + +thunky@^1.0.2: + version "1.1.0" + resolved "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz" + integrity sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA== + +timers-browserify@^2.0.4: + version "2.0.12" + resolved "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.12.tgz" + integrity sha512-9phl76Cqm6FhSX9Xe1ZUAMLtm1BLkKj2Qd5ApyWkXzsMRaA7dgr81kf4wJmQf/hAvg8EEyJxDo3du/0KlhPiKQ== + dependencies: + setimmediate "^1.0.4" + +timsort@^0.3.0: + version "0.3.0" + resolved "https://registry.npmjs.org/timsort/-/timsort-0.3.0.tgz" + integrity sha1-QFQRqOfmM5/mTbmiNN4R3DHgK9Q= + +tmp@0.0.30: + version "0.0.30" + resolved "https://registry.npmjs.org/tmp/-/tmp-0.0.30.tgz" + integrity sha1-ckGdSovn1s51FI/YsyTlk6cRwu0= + dependencies: + os-tmpdir "~1.0.1" + +tmp@0.2.1: + version "0.2.1" + resolved "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz" + integrity sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ== + dependencies: + rimraf "^3.0.0" + +tmp@^0.0.33: + version "0.0.33" + resolved "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz" + integrity sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw== + dependencies: + os-tmpdir "~1.0.2" + +to-array@0.1.4: + version "0.1.4" + resolved "https://registry.npmjs.org/to-array/-/to-array-0.1.4.tgz" + integrity sha1-F+bBH3PdTz10zaek/zI46a2b+JA= + +to-arraybuffer@^1.0.0: + version "1.0.1" + resolved "https://registry.npmjs.org/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz" + integrity sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M= + +to-fast-properties@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz" + integrity sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4= + +to-object-path@^0.3.0: + version "0.3.0" + resolved "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz" + integrity sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68= + dependencies: + kind-of "^3.0.2" + +to-regex-range@^2.1.0: + version "2.1.1" + resolved "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz" + integrity sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg= + dependencies: + is-number "^3.0.0" + repeat-string "^1.6.1" + +to-regex-range@^5.0.1: + version "5.0.1" + resolved "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz" + integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== + dependencies: + is-number "^7.0.0" + +to-regex@^3.0.1, to-regex@^3.0.2: + version "3.0.2" + resolved "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz" + integrity sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw== + dependencies: + define-property "^2.0.2" + extend-shallow "^3.0.2" + regex-not "^1.0.2" + safe-regex "^1.1.0" + +toidentifier@1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz" + integrity sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw== + +tough-cookie@~2.5.0: + version "2.5.0" + resolved "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz" + integrity sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g== + dependencies: + psl "^1.1.28" + punycode "^2.1.1" + +tr46@^2.1.0: + version "2.1.0" + resolved "https://registry.npmjs.org/tr46/-/tr46-2.1.0.tgz" + integrity sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw== + dependencies: + punycode "^2.1.1" + +tree-kill@1.2.2: + version "1.2.2" + resolved "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz" + integrity sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A== + +ts-custom-error@^3.0.0: + version "3.2.0" + resolved "https://registry.npmjs.org/ts-custom-error/-/ts-custom-error-3.2.0.tgz" + integrity sha512-cBvC2QjtvJ9JfWLvstVnI45Y46Y5dMxIaG1TDMGAD/R87hpvqFL+7LhvUDhnRCfOnx/xitollFWWvUKKKhbN0A== + +ts-node@~4.1.0: + version "4.1.0" + resolved "https://registry.npmjs.org/ts-node/-/ts-node-4.1.0.tgz" + integrity sha512-xcZH12oVg9PShKhy3UHyDmuDLV3y7iKwX25aMVPt1SIXSuAfWkFiGPEkg+th8R4YKW/QCxDoW7lJdb15lx6QWg== + dependencies: + arrify "^1.0.0" + chalk "^2.3.0" + diff "^3.1.0" + make-error "^1.1.1" + minimist "^1.2.0" + mkdirp "^0.5.1" + source-map-support "^0.5.0" + tsconfig "^7.0.0" + v8flags "^3.0.0" + yn "^2.0.0" + +ts-pnp@^1.1.6: + version "1.2.0" + resolved "https://registry.npmjs.org/ts-pnp/-/ts-pnp-1.2.0.tgz" + integrity sha512-csd+vJOb/gkzvcCHgTGSChYpy5f1/XKNsmvBGO4JXS+z1v2HobugDz4s1IeFXM3wZB44uczs+eazB5Q/ccdhQw== + +tsconfig@^7.0.0: + version "7.0.0" + resolved "https://registry.npmjs.org/tsconfig/-/tsconfig-7.0.0.tgz" + integrity sha512-vZXmzPrL+EmC4T/4rVlT2jNVMWCi/O4DIiSj3UHg1OE5kCKbk4mfrXc6dZksLgRM/TZlKnousKH9bbTazUWRRw== + dependencies: + "@types/strip-bom" "^3.0.0" + "@types/strip-json-comments" "0.0.30" + strip-bom "^3.0.0" + strip-json-comments "^2.0.0" + +tslib@2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/tslib/-/tslib-2.0.0.tgz" + integrity sha512-lTqkx847PI7xEDYJntxZH89L2/aXInsyF2luSafe/+0fHOMjlBNXdH6th7f70qxLDhul7KZK0zC8V5ZIyHl0/g== + +tslib@^1.10.0, tslib@^1.13.0, tslib@^1.7.1, tslib@^1.8.1, tslib@^1.9.0: + version "1.14.1" + resolved "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz" + integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== + +tslib@^2.0.0, tslib@^2.1.0, tslib@^2.2.0, tslib@^2.3.0: + version "2.3.1" + resolved "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz" + integrity sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw== + +tslint@~6.1.0: + version "6.1.3" + resolved "https://registry.npmjs.org/tslint/-/tslint-6.1.3.tgz" + integrity sha512-IbR4nkT96EQOvKE2PW/djGz8iGNeJ4rF2mBfiYaR/nvUWYKJhLwimoJKgjIFEIDibBtOevj7BqCRL4oHeWWUCg== + dependencies: + "@babel/code-frame" "^7.0.0" + builtin-modules "^1.1.1" + chalk "^2.3.0" + commander "^2.12.1" + diff "^4.0.1" + glob "^7.1.1" + js-yaml "^3.13.1" + minimatch "^3.0.4" + mkdirp "^0.5.3" + resolve "^1.3.2" + semver "^5.3.0" + tslib "^1.13.0" + tsutils "^2.29.0" + +tsutils@^2.29.0: + version "2.29.0" + resolved "https://registry.npmjs.org/tsutils/-/tsutils-2.29.0.tgz" + integrity sha512-g5JVHCIJwzfISaXpXE1qvNalca5Jwob6FjI4AoPlqMusJ6ftFE7IkkFoMhVLRgK+4Kx3gkzb8UZK5t5yTTvEmA== + dependencies: + tslib "^1.8.1" + +tty-browserify@0.0.0: + version "0.0.0" + resolved "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz" + integrity sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY= + +tunnel-agent@^0.6.0: + version "0.6.0" + resolved "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz" + integrity sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0= + dependencies: + safe-buffer "^5.0.1" + +tweetnacl@^0.14.3, tweetnacl@~0.14.0: + version "0.14.5" + resolved "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz" + integrity sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q= + +type-fest@^0.21.3: + version "0.21.3" + resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz" + integrity sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w== + +type-is@~1.6.17, type-is@~1.6.18: + version "1.6.18" + resolved "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz" + integrity sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g== + dependencies: + media-typer "0.3.0" + mime-types "~2.1.24" + +type@^1.0.1: + version "1.2.0" + resolved "https://registry.npmjs.org/type/-/type-1.2.0.tgz" + integrity sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg== + +type@^2.5.0: + version "2.5.0" + resolved "https://registry.npmjs.org/type/-/type-2.5.0.tgz" + integrity sha512-180WMDQaIMm3+7hGXWf12GtdniDEy7nYcyFMKJn/eZz/6tSLXrUN9V0wKSbMjej0I1WHWbpREDEKHtqPQa9NNw== + +typedarray-to-buffer@^3.1.5: + version "3.1.5" + resolved "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz" + integrity sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q== + dependencies: + is-typedarray "^1.0.0" + +typedarray@^0.0.6: + version "0.0.6" + resolved "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz" + integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c= + +typescript@3.9.5: + version "3.9.5" + resolved "https://registry.npmjs.org/typescript/-/typescript-3.9.5.tgz" + integrity sha512-hSAifV3k+i6lEoCJ2k6R2Z/rp/H3+8sdmcn5NrS3/3kE7+RyZXm9aqvxWqjEXHAd8b0pShatpcdMTvEdvAJltQ== + +ua-parser-js@0.7.21: + version "0.7.21" + resolved "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.21.tgz" + integrity sha512-+O8/qh/Qj8CgC6eYBVBykMrNtp5Gebn4dlGD/kKXVkJNDwyrAwSIqwz8CDf+tsAIWVycKcku6gIXJ0qwx/ZXaQ== + +unbox-primitive@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.1.tgz" + integrity sha512-tZU/3NqK3dA5gpE1KtyiJUrEB0lxnGkMFHptJ7q6ewdZ8s12QrODwNbhIJStmJkd1QDXa1NRA8aF2A1zk/Ypyw== + dependencies: + function-bind "^1.1.1" + has-bigints "^1.0.1" + has-symbols "^1.0.2" + which-boxed-primitive "^1.0.2" + +unicode-canonical-property-names-ecmascript@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz" + integrity sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ== + +unicode-match-property-ecmascript@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz" + integrity sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q== + dependencies: + unicode-canonical-property-names-ecmascript "^2.0.0" + unicode-property-aliases-ecmascript "^2.0.0" + +unicode-match-property-value-ecmascript@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.0.0.tgz" + integrity sha512-7Yhkc0Ye+t4PNYzOGKedDhXbYIBe1XEQYQxOPyhcXNMJ0WCABqqj6ckydd6pWRZTHV4GuCPKdBAUiMc60tsKVw== + +unicode-property-aliases-ecmascript@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.0.0.tgz" + integrity sha512-5Zfuy9q/DFr4tfO7ZPeVXb1aPoeQSdeFMLpYuFebehDAhbuevLs5yxSZmIFN1tP5F9Wl4IpJrYojg85/zgyZHQ== + +union-value@^1.0.0: + version "1.0.1" + resolved "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz" + integrity sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg== + dependencies: + arr-union "^3.1.0" + get-value "^2.0.6" + is-extendable "^0.1.1" + set-value "^2.0.1" + +uniq@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/uniq/-/uniq-1.0.1.tgz" + integrity sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8= + +uniqs@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/uniqs/-/uniqs-2.0.0.tgz" + integrity sha1-/+3ks2slKQaW5uFl1KWe25mOawI= + +unique-filename@^1.1.1: + version "1.1.1" + resolved "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz" + integrity sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ== + dependencies: + unique-slug "^2.0.0" + +unique-slug@^2.0.0: + version "2.0.2" + resolved "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.2.tgz" + integrity sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w== + dependencies: + imurmurhash "^0.1.4" + +universal-analytics@0.4.23: + version "0.4.23" + resolved "https://registry.npmjs.org/universal-analytics/-/universal-analytics-0.4.23.tgz" + integrity sha512-lgMIH7XBI6OgYn1woDEmxhGdj8yDefMKg7GkWdeATAlQZFrMrNyxSkpDzY57iY0/6fdlzTbBV03OawvvzG+q7A== + dependencies: + debug "^4.1.1" + request "^2.88.2" + uuid "^3.0.0" + +universalify@^0.1.0: + version "0.1.2" + resolved "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz" + integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg== + +unpipe@1.0.0, unpipe@~1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz" + integrity sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw= + +unquote@~1.1.1: + version "1.1.1" + resolved "https://registry.npmjs.org/unquote/-/unquote-1.1.1.tgz" + integrity sha1-j97XMk7G6IoP+LkF58CYzcCG1UQ= + +unset-value@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz" + integrity sha1-g3aHP30jNRef+x5vw6jtDfyKtVk= + dependencies: + has-value "^0.3.1" + isobject "^3.0.0" + +upath@^1.1.1: + version "1.2.0" + resolved "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz" + integrity sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg== + +uri-js@^4.2.2: + version "4.4.1" + resolved "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz" + integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== + dependencies: + punycode "^2.1.0" + +urix@^0.1.0: + version "0.1.0" + resolved "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz" + integrity sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI= + +url-parse@^1.4.3: + version "1.5.3" + resolved "https://registry.npmjs.org/url-parse/-/url-parse-1.5.3.tgz" + integrity sha512-IIORyIQD9rvj0A4CLWsHkBBJuNqWpFQe224b6j9t/ABmquIS0qDU2pY6kl6AuOrL5OkCXHMCFNe1jBcuAggjvQ== + dependencies: + querystringify "^2.1.1" + requires-port "^1.0.0" + +url@^0.11.0: + version "0.11.0" + resolved "https://registry.npmjs.org/url/-/url-0.11.0.tgz" + integrity sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE= + dependencies: + punycode "1.3.2" + querystring "0.2.0" + +use@^3.1.0: + version "3.1.1" + resolved "https://registry.npmjs.org/use/-/use-3.1.1.tgz" + integrity sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ== + +util-deprecate@^1.0.1, util-deprecate@^1.0.2, util-deprecate@~1.0.1: + version "1.0.2" + resolved "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz" + integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= + +util-promisify@^2.1.0: + version "2.1.0" + resolved "https://registry.npmjs.org/util-promisify/-/util-promisify-2.1.0.tgz" + integrity sha1-PCI2R2xNMsX/PEcAKt18E7moKlM= + dependencies: + object.getownpropertydescriptors "^2.0.3" + +util.promisify@~1.0.0: + version "1.0.1" + resolved "https://registry.npmjs.org/util.promisify/-/util.promisify-1.0.1.tgz" + integrity sha512-g9JpC/3He3bm38zsLupWryXHoEcS22YHthuPQSJdMy6KNrzIRzWqcsHzD/WUnqe45whVou4VIsPew37DoXWNrA== + dependencies: + define-properties "^1.1.3" + es-abstract "^1.17.2" + has-symbols "^1.0.1" + object.getownpropertydescriptors "^2.1.0" + +util@0.10.3: + version "0.10.3" + resolved "https://registry.npmjs.org/util/-/util-0.10.3.tgz" + integrity sha1-evsa/lCAUkZInj23/g7TeTNqwPk= + dependencies: + inherits "2.0.1" + +util@^0.10.3: + version "0.10.4" + resolved "https://registry.npmjs.org/util/-/util-0.10.4.tgz" + integrity sha512-0Pm9hTQ3se5ll1XihRic3FDIku70C+iHUdT/W926rSgHV5QgXsYbKZN8MSC3tJtSkhuROzvsQjAaFENRXr+19A== + dependencies: + inherits "2.0.3" + +util@^0.11.0: + version "0.11.1" + resolved "https://registry.npmjs.org/util/-/util-0.11.1.tgz" + integrity sha512-HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ== + dependencies: + inherits "2.0.3" + +utils-merge@1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz" + integrity sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM= + +uuid@8.3.0: + version "8.3.0" + resolved "https://registry.npmjs.org/uuid/-/uuid-8.3.0.tgz" + integrity sha512-fX6Z5o4m6XsXBdli9g7DtWgAx+osMsRRZFKma1mIUsLCz6vRvv+pz5VNbyu9UEDzpMWulZfvpgb/cmDXVulYFQ== + +uuid@^3.0.0, uuid@^3.3.2, uuid@^3.3.3, uuid@^3.4.0: + version "3.4.0" + resolved "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz" + integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A== + +v8flags@^3.0.0: + version "3.2.0" + resolved "https://registry.npmjs.org/v8flags/-/v8flags-3.2.0.tgz" + integrity sha512-mH8etigqMfiGWdeXpaaqGfs6BndypxusHHcv2qSHyZkGEznCd/qAXCWWRzeowtL54147cktFOC4P5y+kl8d8Jg== + dependencies: + homedir-polyfill "^1.0.1" + +validate-npm-package-license@^3.0.1: + version "3.0.4" + resolved "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz" + integrity sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew== + dependencies: + spdx-correct "^3.0.0" + spdx-expression-parse "^3.0.0" + +validate-npm-package-name@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-3.0.0.tgz" + integrity sha1-X6kS2B630MdK/BQN5zF/DKffQ34= + dependencies: + builtins "^1.0.3" + +validator@^13.7.0: + version "13.7.0" + resolved "https://registry.npmjs.org/validator/-/validator-13.7.0.tgz" + integrity sha512-nYXQLCBkpJ8X6ltALua9dRrZDHVYxjJ1wgskNt1lH9fzGjs3tgojGSCBjmEPwkWS1y29+DrizMTW19Pr9uB2nw== + +vary@~1.1.2: + version "1.1.2" + resolved "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz" + integrity sha1-IpnwLG3tMNSllhsLn3RSShj2NPw= + +vendors@^1.0.0: + version "1.0.4" + resolved "https://registry.npmjs.org/vendors/-/vendors-1.0.4.tgz" + integrity sha512-/juG65kTL4Cy2su4P8HjtkTxk6VmJDiOPBufWniqQ6wknac6jNiXS9vU+hO3wgusiyqWlzTbVHi0dyJqRONg3w== + +verror@1.10.0: + version "1.10.0" + resolved "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz" + integrity sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA= + dependencies: + assert-plus "^1.0.0" + core-util-is "1.0.2" + extsprintf "^1.2.0" + +vm-browserify@^1.0.1: + version "1.1.2" + resolved "https://registry.npmjs.org/vm-browserify/-/vm-browserify-1.1.2.tgz" + integrity sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ== + +void-elements@^2.0.0: + version "2.0.1" + resolved "https://registry.npmjs.org/void-elements/-/void-elements-2.0.1.tgz" + integrity sha1-wGavtYK7HLQSjWDqkjkulNXp2+w= + +watchpack-chokidar2@^2.0.1: + version "2.0.1" + resolved "https://registry.npmjs.org/watchpack-chokidar2/-/watchpack-chokidar2-2.0.1.tgz" + integrity sha512-nCFfBIPKr5Sh61s4LPpy1Wtfi0HE8isJ3d2Yb5/Ppw2P2B/3eVSEBjKfN0fmHJSK14+31KwMKmcrzs2GM4P0Ww== + dependencies: + chokidar "^2.1.8" + +watchpack@^1.6.1: + version "1.7.5" + resolved "https://registry.npmjs.org/watchpack/-/watchpack-1.7.5.tgz" + integrity sha512-9P3MWk6SrKjHsGkLT2KHXdQ/9SNkyoJbabxnKOoJepsvJjJG8uYTR3yTPxPQvNDI3w4Nz1xnE0TLHK4RIVe/MQ== + dependencies: + graceful-fs "^4.1.2" + neo-async "^2.5.0" + optionalDependencies: + chokidar "^3.4.1" + watchpack-chokidar2 "^2.0.1" + +wbuf@^1.1.0, wbuf@^1.7.3: + version "1.7.3" + resolved "https://registry.npmjs.org/wbuf/-/wbuf-1.7.3.tgz" + integrity sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA== + dependencies: + minimalistic-assert "^1.0.0" + +wcwidth@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz" + integrity sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g= + dependencies: + defaults "^1.0.3" + +webdriver-js-extender@2.1.0: + version "2.1.0" + resolved "https://registry.npmjs.org/webdriver-js-extender/-/webdriver-js-extender-2.1.0.tgz" + integrity sha512-lcUKrjbBfCK6MNsh7xaY2UAUmZwe+/ib03AjVOpFobX4O7+83BUveSrLfU0Qsyb1DaKJdQRbuU+kM9aZ6QUhiQ== + dependencies: + "@types/selenium-webdriver" "^3.0.0" + selenium-webdriver "^3.0.1" + +webdriver-manager@^12.1.7: + version "12.1.8" + resolved "https://registry.npmjs.org/webdriver-manager/-/webdriver-manager-12.1.8.tgz" + integrity sha512-qJR36SXG2VwKugPcdwhaqcLQOD7r8P2Xiv9sfNbfZrKBnX243iAkOueX1yAmeNgIKhJ3YAT/F2gq6IiEZzahsg== + dependencies: + adm-zip "^0.4.9" + chalk "^1.1.1" + del "^2.2.0" + glob "^7.0.3" + ini "^1.3.4" + minimist "^1.2.0" + q "^1.4.1" + request "^2.87.0" + rimraf "^2.5.2" + semver "^5.3.0" + xml2js "^0.4.17" + +webidl-conversions@^6.1.0: + version "6.1.0" + resolved "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-6.1.0.tgz" + integrity sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w== + +webpack-dev-middleware@3.7.2: + version "3.7.2" + resolved "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-3.7.2.tgz" + integrity sha512-1xC42LxbYoqLNAhV6YzTYacicgMZQTqRd27Sim9wn5hJrX3I5nxYy1SxSd4+gjUFsz1dQFj+yEe6zEVmSkeJjw== + dependencies: + memory-fs "^0.4.1" + mime "^2.4.4" + mkdirp "^0.5.1" + range-parser "^1.2.1" + webpack-log "^2.0.0" + +webpack-dev-middleware@^3.7.2: + version "3.7.3" + resolved "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-3.7.3.tgz" + integrity sha512-djelc/zGiz9nZj/U7PTBi2ViorGJXEWo/3ltkPbDyxCXhhEXkW0ce99falaok4TPj+AsxLiXJR0EBOb0zh9fKQ== + dependencies: + memory-fs "^0.4.1" + mime "^2.4.4" + mkdirp "^0.5.1" + range-parser "^1.2.1" + webpack-log "^2.0.0" + +webpack-dev-server@3.11.0: + version "3.11.0" + resolved "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-3.11.0.tgz" + integrity sha512-PUxZ+oSTxogFQgkTtFndEtJIPNmml7ExwufBZ9L2/Xyyd5PnOL5UreWe5ZT7IU25DSdykL9p1MLQzmLh2ljSeg== + dependencies: + ansi-html "0.0.7" + bonjour "^3.5.0" + chokidar "^2.1.8" + compression "^1.7.4" + connect-history-api-fallback "^1.6.0" + debug "^4.1.1" + del "^4.1.1" + express "^4.17.1" + html-entities "^1.3.1" + http-proxy-middleware "0.19.1" + import-local "^2.0.0" + internal-ip "^4.3.0" + ip "^1.1.5" + is-absolute-url "^3.0.3" + killable "^1.0.1" + loglevel "^1.6.8" + opn "^5.5.0" + p-retry "^3.0.1" + portfinder "^1.0.26" + schema-utils "^1.0.0" + selfsigned "^1.10.7" + semver "^6.3.0" + serve-index "^1.9.1" + sockjs "0.3.20" + sockjs-client "1.4.0" + spdy "^4.0.2" + strip-ansi "^3.0.1" + supports-color "^6.1.0" + url "^0.11.0" + webpack-dev-middleware "^3.7.2" + webpack-log "^2.0.0" + ws "^6.2.1" + yargs "^13.3.2" + +webpack-log@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/webpack-log/-/webpack-log-2.0.0.tgz" + integrity sha512-cX8G2vR/85UYG59FgkoMamwHUIkSSlV3bBMRsbxVXVUk2j6NleCKjQ/WE9eYg9WY4w25O9w8wKP4rzNZFmUcUg== + dependencies: + ansi-colors "^3.0.0" + uuid "^3.3.2" + +webpack-merge@4.2.2: + version "4.2.2" + resolved "https://registry.npmjs.org/webpack-merge/-/webpack-merge-4.2.2.tgz" + integrity sha512-TUE1UGoTX2Cd42j3krGYqObZbOD+xF7u28WB7tfUordytSjbWTIjK/8V0amkBfTYN4/pB/GIDlJZZ657BGG19g== + dependencies: + lodash "^4.17.15" + +webpack-sources@1.4.3, webpack-sources@^1.1.0, webpack-sources@^1.2.0, webpack-sources@^1.3.0, webpack-sources@^1.4.0, webpack-sources@^1.4.1, webpack-sources@^1.4.3: + version "1.4.3" + resolved "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.4.3.tgz" + integrity sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ== + dependencies: + source-list-map "^2.0.0" + source-map "~0.6.1" + +webpack-subresource-integrity@1.4.1: + version "1.4.1" + resolved "https://registry.npmjs.org/webpack-subresource-integrity/-/webpack-subresource-integrity-1.4.1.tgz" + integrity sha512-XMLFInbGbB1HV7K4vHWANzc1CN0t/c4bBvnlvGxGwV45yE/S/feAXIm8dJsCkzqWtSKnmaEgTp/meyeThxG4Iw== + dependencies: + webpack-sources "^1.3.0" + +webpack@4.43.0: + version "4.43.0" + resolved "https://registry.npmjs.org/webpack/-/webpack-4.43.0.tgz" + integrity sha512-GW1LjnPipFW2Y78OOab8NJlCflB7EFskMih2AHdvjbpKMeDJqEgSx24cXXXiPS65+WSwVyxtDsJH6jGX2czy+g== + dependencies: + "@webassemblyjs/ast" "1.9.0" + "@webassemblyjs/helper-module-context" "1.9.0" + "@webassemblyjs/wasm-edit" "1.9.0" + "@webassemblyjs/wasm-parser" "1.9.0" + acorn "^6.4.1" + ajv "^6.10.2" + ajv-keywords "^3.4.1" + chrome-trace-event "^1.0.2" + enhanced-resolve "^4.1.0" + eslint-scope "^4.0.3" + json-parse-better-errors "^1.0.2" + loader-runner "^2.4.0" + loader-utils "^1.2.3" + memory-fs "^0.4.1" + micromatch "^3.1.10" + mkdirp "^0.5.3" + neo-async "^2.6.1" + node-libs-browser "^2.2.1" + schema-utils "^1.0.0" + tapable "^1.1.3" + terser-webpack-plugin "^1.4.3" + watchpack "^1.6.1" + webpack-sources "^1.4.1" + +websocket-driver@0.6.5, websocket-driver@>=0.5.1: + version "0.6.5" + resolved "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.6.5.tgz" + integrity sha1-XLJVbOuF9Dc8bYI4qmkchFThOjY= + dependencies: + websocket-extensions ">=0.1.1" + +websocket-extensions@>=0.1.1: + version "0.1.4" + resolved "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.4.tgz" + integrity sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg== + +whatwg-mimetype@^2.3.0: + version "2.3.0" + resolved "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz" + integrity sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g== + +whatwg-url@^8.0.0: + version "8.7.0" + resolved "https://registry.npmjs.org/whatwg-url/-/whatwg-url-8.7.0.tgz" + integrity sha512-gAojqb/m9Q8a5IV96E3fHJM70AzCkgt4uXYX2O7EmuyOnLrViCQlsEBmF9UQIu3/aeAIp2U17rtbpZWNntQqdg== + dependencies: + lodash "^4.7.0" + tr46 "^2.1.0" + webidl-conversions "^6.1.0" + +when@~3.6.x: + version "3.6.4" + resolved "https://registry.npmjs.org/when/-/when-3.6.4.tgz" + integrity sha1-RztRfsFZ4rhQBUl6E5g/CVQS404= + +which-boxed-primitive@^1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz" + integrity sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg== + dependencies: + is-bigint "^1.0.1" + is-boolean-object "^1.1.0" + is-number-object "^1.0.4" + is-string "^1.0.5" + is-symbol "^1.0.3" + +which-module@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz" + integrity sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho= + +which@1.3.1, which@^1.2.1, which@^1.2.9, which@^1.3.1: + version "1.3.1" + resolved "https://registry.npmjs.org/which/-/which-1.3.1.tgz" + integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== + dependencies: + isexe "^2.0.0" + +wide-align@1.1.3: + version "1.1.3" + resolved "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz" + integrity sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA== + dependencies: + string-width "^1.0.2 || 2" + +worker-farm@^1.7.0: + version "1.7.0" + resolved "https://registry.npmjs.org/worker-farm/-/worker-farm-1.7.0.tgz" + integrity sha512-rvw3QTZc8lAxyVrqcSGVm5yP/IJ2UcB3U0graE3LCFoZ0Yn2x4EoVSqJKdB/T5M+FLcRPjz4TDacRf3OCfNUzw== + dependencies: + errno "~0.1.7" + +worker-plugin@4.0.3: + version "4.0.3" + resolved "https://registry.npmjs.org/worker-plugin/-/worker-plugin-4.0.3.tgz" + integrity sha512-7hFDYWiKcE3yHZvemsoM9lZis/PzurHAEX1ej8PLCu818Rt6QqUAiDdxHPCKZctzmhqzPpcFSgvMCiPbtooqAg== + dependencies: + loader-utils "^1.1.0" + +wrap-ansi@^5.1.0: + version "5.1.0" + resolved "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz" + integrity sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q== + dependencies: + ansi-styles "^3.2.0" + string-width "^3.0.0" + strip-ansi "^5.0.0" + +wrap-ansi@^6.2.0: + version "6.2.0" + resolved "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz" + integrity sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA== + dependencies: + ansi-styles "^4.0.0" + string-width "^4.1.0" + strip-ansi "^6.0.0" + +wrap-ansi@^7.0.0: + version "7.0.0" + resolved "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz" + integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== + dependencies: + ansi-styles "^4.0.0" + string-width "^4.1.0" + strip-ansi "^6.0.0" + +wrappy@1: + version "1.0.2" + resolved "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz" + integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= + +write-file-atomic@^3.0.3: + version "3.0.3" + resolved "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz" + integrity sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q== + dependencies: + imurmurhash "^0.1.4" + is-typedarray "^1.0.0" + signal-exit "^3.0.2" + typedarray-to-buffer "^3.1.5" + +write-json-file@^5.0.0: + version "5.0.0" + resolved "https://registry.npmjs.org/write-json-file/-/write-json-file-5.0.0.tgz" + integrity sha512-ddSsCLa4aQ3kI21BthINo4q905/wfhvQ3JL3774AcRjBaiQmfn5v4rw77jQ7T6CmAit9VOQO+FsLyPkwxoB1fw== + dependencies: + detect-indent "^7.0.0" + is-plain-obj "^4.0.0" + sort-keys "^5.0.0" + write-file-atomic "^3.0.3" + +ws@^6.2.1: + version "6.2.2" + resolved "https://registry.npmjs.org/ws/-/ws-6.2.2.tgz" + integrity sha512-zmhltoSR8u1cnDsD43TX59mzoMZsLKqUweyYBAIvTngR3shc0W6aOZylZmq/7hqyVxPdi+5Ud2QInblgyE72fw== + dependencies: + async-limiter "~1.0.0" + +ws@~7.4.2: + version "7.4.6" + resolved "https://registry.npmjs.org/ws/-/ws-7.4.6.tgz" + integrity sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A== + +xml2js@^0.4.17: + version "0.4.23" + resolved "https://registry.npmjs.org/xml2js/-/xml2js-0.4.23.tgz" + integrity sha512-ySPiMjM0+pLDftHgXY4By0uswI3SPKLDw/i3UXbnO8M/p28zqexCUoPmQFrYD+/1BzhGJSs2i1ERWKJAtiLrug== + dependencies: + sax ">=0.6.0" + xmlbuilder "~11.0.0" + +xmlbuilder@~11.0.0: + version "11.0.1" + resolved "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz" + integrity sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA== + +xmlhttprequest-ssl@~1.6.2: + version "1.6.3" + resolved "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.6.3.tgz" + integrity sha512-3XfeQE/wNkvrIktn2Kf0869fC0BN6UpydVasGIeSm2B1Llihf7/0UfZM+eCkOw3P7bP4+qPgqhm7ZoxuJtFU0Q== + +xtend@^4.0.0, xtend@~4.0.1: + version "4.0.2" + resolved "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz" + integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== + +y18n@^4.0.0: + version "4.0.3" + resolved "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz" + integrity sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ== + +y18n@^5.0.5: + version "5.0.8" + resolved "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz" + integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA== + +yallist@^3.0.0, yallist@^3.0.2, yallist@^3.1.1: + version "3.1.1" + resolved "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz" + integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== + +yallist@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz" + integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== + +yargs-parser@13.1.2, yargs-parser@^13.1.2: + version "13.1.2" + resolved "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz" + integrity sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg== + dependencies: + camelcase "^5.0.0" + decamelize "^1.2.0" + +yargs-parser@^18.1.2: + version "18.1.3" + resolved "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz" + integrity sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ== + dependencies: + camelcase "^5.0.0" + decamelize "^1.2.0" + +yargs-parser@^20.2.2: + version "20.2.9" + resolved "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz" + integrity sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w== + +yargs-unparser@1.6.0: + version "1.6.0" + resolved "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-1.6.0.tgz" + integrity sha512-W9tKgmSn0DpSatfri0nx52Joq5hVXgeLiqR/5G0sZNDoLZFOr/xjBUDcShCOGNsBnEMNo1KAMBkTej1Hm62HTw== + dependencies: + flat "^4.1.0" + lodash "^4.17.15" + yargs "^13.3.0" + +yargs@13.3.2, yargs@^13.3.0, yargs@^13.3.2: + version "13.3.2" + resolved "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz" + integrity sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw== + dependencies: + cliui "^5.0.0" + find-up "^3.0.0" + get-caller-file "^2.0.1" + require-directory "^2.1.1" + require-main-filename "^2.0.0" + set-blocking "^2.0.0" + string-width "^3.0.0" + which-module "^2.0.0" + y18n "^4.0.0" + yargs-parser "^13.1.2" + +yargs@^15.3.1: + version "15.4.1" + resolved "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz" + integrity sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A== + dependencies: + cliui "^6.0.0" + decamelize "^1.2.0" + find-up "^4.1.0" + get-caller-file "^2.0.1" + require-directory "^2.1.1" + require-main-filename "^2.0.0" + set-blocking "^2.0.0" + string-width "^4.2.0" + which-module "^2.0.0" + y18n "^4.0.0" + yargs-parser "^18.1.2" + +yargs@^16.1.1: + version "16.2.0" + resolved "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz" + integrity sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw== + dependencies: + cliui "^7.0.2" + escalade "^3.1.1" + get-caller-file "^2.0.5" + require-directory "^2.1.1" + string-width "^4.2.0" + y18n "^5.0.5" + yargs-parser "^20.2.2" + +yeast@0.1.2: + version "0.1.2" + resolved "https://registry.npmjs.org/yeast/-/yeast-0.1.2.tgz" + integrity sha1-AI4G2AlDIMNy28L47XagymyKxBk= + +yn@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/yn/-/yn-2.0.0.tgz" + integrity sha1-5a2ryKz0CPY4X8dklWhMiOavaJo= + +yocto-queue@^0.1.0: + version "0.1.0" + resolved "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz" + integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== + +z-schema@^5.0.0: + version "5.0.2" + resolved "https://registry.npmjs.org/z-schema/-/z-schema-5.0.2.tgz" + integrity sha512-40TH47ukMHq5HrzkeVE40Ad7eIDKaRV2b+Qpi2prLc9X9eFJFzV7tMe5aH12e6avaSS/u5l653EQOv+J9PirPw== + dependencies: + lodash.get "^4.4.2" + lodash.isequal "^4.5.0" + validator "^13.7.0" + optionalDependencies: + commander "^2.7.1" + +zone.js@~0.10.3: + version "0.10.3" + resolved "https://registry.npmjs.org/zone.js/-/zone.js-0.10.3.tgz" + integrity sha512-LXVLVEq0NNOqK/fLJo3d0kfzd4sxwn2/h67/02pjCjfKDxgx1i9QqpvtHD8CrBnSSwMw5+dy11O7FRX5mkO7Cg==