From 594d93eb3b3166b5dffc1ccce12796be6eb4babc Mon Sep 17 00:00:00 2001 From: Aaron Greenspan Date: Tue, 16 Feb 2021 13:45:09 -0700 Subject: [PATCH] 0.3.0 refactor ui: adds overlay layer to patch-db-client ui: getting towards mocks ui: cleans up factory init ui: nice type hack ui: live api for patch ui: api service source + http starts up ui: api source + http ui: rework patchdb config, pass stashTimeout into patchDbModel wires in temp patching into api service ui: example of wiring patchdbmodel into page begin integration remove unnecessary method linting first data rendering rework app initialization http source working for ssh delete call temp patches working entire Embassy tab complete not in kansas anymore ripping, saving progress progress for API request response types and endoint defs Update data-model.ts shambles, but in a good way progress big progress progress installed list working big progress progress progress begin marketplace redesign Update api-types.ts Update api-types.ts marketplace improvements cosmetic dependencies and recommendations begin nym auth approach install wizard restore flow and donations --- ui/package-lock.json | 21908 ++++++---------- ui/package.json | 33 +- ui/src/app/app-routing.module.ts | 28 +- ui/src/app/app.component.html | 240 +- ui/src/app/app.component.ts | 217 +- ui/src/app/app.module.ts | 23 +- .../app-backup-confirmation.component.ts | 45 - .../badge-menu.component.html | 10 +- .../badge-menu.component.scss | 19 +- .../badge-menu-button/badge-menu.component.ts | 14 +- .../config-header/config-header.component.ts | 2 +- .../dependency-list.component.html | 14 - .../dependency-list.component.module.ts | 28 - .../dependency-list.component.ts | 30 - .../installed-dependency-item.component.html | 33 - ...talled-dependency-item.component.module.ts | 22 - .../installed-dependency-item.component.scss | 30 - .../installed-dependency-item.component.ts | 113 - ...marketplace-dependency-item.component.html | 45 - ...tplace-dependency-item.component.module.ts | 22 - ...marketplace-dependency-item.component.scss | 35 - .../marketplace-dependency-item.component.ts | 88 - .../error-message.component.html | 6 - .../error-message.component.module.ts | 20 - .../error-message.component.scss | 10 - .../error-message/error-message.component.ts | 19 - .../complete/complete.component.html | 6 +- .../complete/complete.component.ts | 23 +- .../dependencies/dependencies.component.html | 31 - .../dependencies.component.module.ts | 22 - .../dependencies/dependencies.component.ts | 127 - .../dependents/dependents.component.html | 6 +- .../dependents/dependents.component.ts | 29 +- .../install-wizard.component.html | 10 +- .../install-wizard.component.module.ts | 2 - .../install-wizard.component.ts | 23 +- .../app/components/install-wizard/loadable.ts | 4 +- .../install-wizard/notes/notes.component.ts | 4 +- .../install-wizard/prebaked-wizards.ts | 165 +- .../object-config/object-config.component.ts | 8 +- .../pwa-back-button/pwa-back.component.ts | 7 +- .../recommendation-button.component.html | 2 +- .../recommendation-button.component.ts | 25 +- .../components/status/status.component.html | 16 +- .../components/status/status.component.scss | 15 - .../app/components/status/status.component.ts | 48 +- .../update-os-banner.component.html | 5 - .../update-os-banner.component.module.ts | 18 - .../update-os-banner.component.scss | 11 - .../update-os-banner.component.ts | 35 - ui/src/app/guards/auth.guard.ts | 35 +- ui/src/app/guards/deactivate.guard.ts | 26 - ui/src/app/guards/maintenance.guard.ts | 39 + ui/src/app/guards/unauth.guard.ts | 19 +- ui/src/app/guards/unmaintenance.guard.ts | 31 + .../modals/app-backup/app-backup.module.ts | 17 - .../modals/app-backup/app-backup.page.html | 61 - .../modals/app-backup/app-backup.page.scss | 3 - .../app/modals/app-backup/app-backup.page.ts | 225 - .../modal-injectable-type.ts | 2 +- .../app-config-list/app-config-list.page.ts | 10 +- .../app-config-object.page.ts | 4 +- .../app-config-union/app-config-union.page.ts | 6 +- .../app-config-value.page.html | 2 +- .../app-config-value/app-config-value.page.ts | 6 +- .../backup-confirmation.component.html} | 6 +- .../backup-confirmation.component.module.ts} | 10 +- .../backup-confirmation.component.scss} | 0 .../backup-confirmation.component.ts | 41 + .../app/modals/os-welcome/os-welcome.page.ts | 3 +- ui/src/app/models/app-model.ts | 290 +- ui/src/app/models/app-types.ts | 146 - ui/src/app/models/model-preload.ts | 74 - ui/src/app/models/patch-db/data-model.ts | 364 + .../patch-db/local-storage-bootstrap.ts | 29 + .../models/patch-db/patch-db-model.factory.ts | 24 + ui/src/app/models/patch-db/patch-db-model.ts | 52 + ui/src/app/models/server-model.ts | 177 - ui/src/app/modules/sharing.module.ts | 41 +- .../app-actions/app-actions.page.html | 41 +- .../app-actions/app-actions.page.ts | 68 +- .../app-available-list.module.ts | 4 - .../app-available-list.page.html | 115 +- .../app-available-list.page.scss | 22 +- .../app-available-list.page.ts | 159 +- .../app-available-show.module.ts | 4 - .../app-available-show.page.html | 206 +- .../app-available-show.page.ts | 158 +- .../app-config/app-config.module.ts | 5 - .../app-config/app-config.page.html | 57 +- .../apps-routes/app-config/app-config.page.ts | 161 +- .../app-installed-list.module.ts | 12 +- .../app-installed-list.page.html | 74 +- .../app-installed-list.page.ts | 119 +- .../app-installed-show.module.ts | 8 - .../app-installed-show.page.html | 335 +- .../app-installed-show.page.scss | 16 + .../app-installed-show.page.ts | 303 +- .../app-instructions.module.ts | 4 +- .../app-instructions.page.html | 22 +- .../app-instructions.page.scss | 3 + .../app-instructions/app-instructions.page.ts | 40 +- .../app-interfaces/app-interfaces.module.ts} | 16 +- .../app-interfaces/app-interfaces.page.html | 52 + .../app-interfaces/app-interfaces.page.scss | 4 + .../app-interfaces/app-interfaces.page.ts | 49 + .../apps-routes/app-logs/app-logs.page.html | 5 +- .../apps-routes/app-logs/app-logs.page.ts | 28 +- .../app-metrics/app-metrics.page.html | 74 - .../app-metrics/app-metrics.page.ts | 138 - .../apps-routes/app-metrics/metric-store.ts | 15 - .../app-properties.module.ts} | 8 +- .../app-properties/app-properties.page.html | 74 + .../app-properties.page.scss} | 0 .../app-properties/app-properties.page.ts | 128 + .../app-properties/property-store.ts | 15 + .../app-restore/app-restore.module.ts | 30 + .../app-restore/app-restore.page.html | 64 + .../app-restore/app-restore.page.scss} | 0 .../app-restore/app-restore.page.ts | 91 + .../pages/apps-routes/apps-routing.module.ts | 50 +- .../auth-password/auth-password.module.ts | 26 + .../auth-password/auth-password.page.html | 35 + .../auth-password/auth-password.page.scss | 3 + .../auth-password/auth-password.page.ts | 41 + .../auth-routes/auth-pin/auth-pin.module.ts | 26 + .../auth-routes/auth-pin/auth-pin.page.html | 34 + .../auth-routes/auth-pin/auth-pin.page.scss | 3 + .../auth-routes/auth-pin/auth-pin.page.ts | 41 + .../pages/auth-routes/auth-routing.module.ts | 24 + .../authenticate-routing.module.ts | 17 - .../pages/authenticate/authenticate.module.ts | 21 - .../pages/authenticate/authenticate.page.html | 27 - .../pages/authenticate/authenticate.page.ts | 44 - .../pages/maintenance/maintenance.module.ts | 24 + .../pages/maintenance/maintenance.page.html | 13 + .../maintenance.page.scss} | 0 .../app/pages/maintenance/maintenance.page.ts | 17 + .../notifications/notifications.module.ts | 2 + .../notifications/notifications.page.html | 18 +- .../pages/notifications/notifications.page.ts | 87 +- .../dev-options/dev-options.module.ts | 6 +- .../dev-options/dev-options.page.html | 16 +- .../dev-options/dev-options.page.ts | 30 +- .../dev-ssh-keys/dev-ssh-keys.module.ts | 2 + .../dev-ssh-keys/dev-ssh-keys.page.html | 15 +- .../dev-ssh-keys/dev-ssh-keys.page.ts | 50 +- .../dev-ssh-keys/ssh.service.ts | 43 + .../external-drives/external-drives.page.html | 30 - .../external-drives/external-drives.page.ts | 65 - .../general-settings.module.ts} | 13 +- .../general-settings.page.html} | 19 +- .../general-settings.page.scss} | 0 .../general-settings/general-settings.page.ts | 19 + .../app/pages/server-routes/lan/lan.page.html | 42 +- .../app/pages/server-routes/lan/lan.page.ts | 55 +- .../server-backup/server-backup.module.ts | 28 + .../server-backup/server-backup.page.html | 69 + .../server-backup.page.scss} | 0 .../server-backup/server-backup.page.ts | 81 + .../server-config/server-config.page.ts | 43 - .../server-logs/server-logs.page.html | 8 +- .../server-logs/server-logs.page.ts | 19 +- .../server-metrics/server-metrics.page.html | 28 +- .../server-metrics/server-metrics.page.ts | 18 +- .../server-routes/server-routing.module.ts | 19 +- .../server-show/server-show.page.html | 110 +- .../server-show/server-show.page.ts | 79 +- .../server-specs/server-specs.page.html | 55 +- .../server-specs/server-specs.page.ts | 25 +- .../wifi/wifi-add/wifi-add.page.html | 8 +- .../wifi/wifi-add/wifi-add.page.ts | 41 +- .../pages/server-routes/wifi/wifi.module.ts | 2 + .../pages/server-routes/wifi/wifi.page.html | 24 +- .../app/pages/server-routes/wifi/wifi.page.ts | 50 +- .../pages/server-routes/wifi/wifi.service.ts | 83 +- ui/src/app/pipes/annotation-status.pipe.ts | 2 +- ui/src/app/pipes/display-bulb.pipe.ts | 19 +- ui/src/app/pipes/empty.pipe.ts | 11 + ui/src/app/pipes/emver.pipe.ts | 18 - ui/src/app/pipes/icon.pipe.ts | 11 - ui/src/app/pipes/includes.pipe.ts | 4 +- .../pipes/installed-latest-comparison.pipe.ts | 83 +- ui/src/app/pipes/notification-color.pipe.ts | 23 + ui/src/app/pipes/peek-properties.pipe.ts | 11 - ui/src/app/pipes/status.pipe.ts | 13 + ui/src/app/pipes/ui.pipe.ts | 36 + .../config-cursor.ts | 10 +- .../config-types.ts | 0 .../config-utilities.ts | 0 .../modal-presentable.ts | 0 ui/src/app/services/api/API.def | 107 - ui/src/app/services/api/api-types.ts | 330 +- .../app/services/api/api.service.factory.ts | 10 +- ui/src/app/services/api/api.service.ts | 315 +- ui/src/app/services/api/live-api.service.ts | 357 +- ui/src/app/services/api/md-sample.md | 282 - ui/src/app/services/api/mock-api.service.ts | 1694 +- ui/src/app/services/api/mock-app-fixures.ts | 1723 +- ui/src/app/services/auth.service.ts | 54 +- ui/src/app/services/config.service.ts | 103 +- ui/src/app/services/connection.service.ts | 105 + ui/src/app/services/http.service.ts | 137 +- ui/src/app/services/os-update.service.ts | 69 - .../services/pkg-status-rendering.service.ts | 58 + ui/src/app/services/pwa-back.service.ts | 23 - ui/src/app/services/server-config.service.ts | 176 +- ui/src/app/services/split-pane.service.ts | 3 +- .../app/services/startup-alerts.notifier.ts | 14 +- ui/src/app/services/sync.notifier.ts | 56 - ui/src/app/services/sync.service.ts | 74 - .../tracking-modal-controller.service.ts | 3 +- ui/src/app/util/cleanup.ts | 15 - ui/src/app/util/metrics.util.ts | 192 - ui/src/app/util/misc.util.ts | 8 +- ui/src/app/util/properties.util.ts | 137 + ui/src/app/util/property-subject.util.ts | 49 - ui/src/app/util/status-rendering.ts | 31 - ui/src/app/util/types.util.ts | 1 - ui/src/app/util/web.util.ts | 10 - ui/src/assets/icon/eject-outline.svg | 4 - ui/src/assets/icon/eject.svg | 4 - ui/src/assets/img/logo.png | Bin 0 -> 8149 bytes .../img/service-icons/bitcoin-proxy.png | Bin 0 -> 48593 bytes ui/src/assets/img/service-icons/bitwarden.png | Bin 12435 -> 0 bytes .../img/service-icons/btc-rpc-proxy.png | Bin 58548 -> 0 bytes .../assets/img/service-icons/c-lightning.png | Bin 52891 -> 0 bytes ui/src/assets/img/service-icons/cups.png | Bin 63490 -> 0 bytes .../assets/img/service-icons/filebrowser.png | Bin 32957 -> 0 bytes .../img/service-icons/lightning-terminal.png | Bin 56454 -> 0 bytes ui/src/assets/img/service-icons/pastebin.png | Bin 62141 -> 0 bytes .../img/service-icons/ride-the-lightning.png | Bin 25506 -> 0 bytes ui/src/assets/logo-full.png | Bin 16716 -> 0 bytes ui/src/assets/logo.png | Bin 8789 -> 0 bytes ui/src/global.scss | 50 +- ui/test/config.test.ts | 92 +- ui/ui-config.json | 22 + ui/use-mocks.json | 5 - 238 files changed, 15137 insertions(+), 21331 deletions(-) delete mode 100644 ui/src/app/components/app-backup-confirmation/app-backup-confirmation.component.ts delete mode 100644 ui/src/app/components/dependency-list/dependency-list.component.html delete mode 100644 ui/src/app/components/dependency-list/dependency-list.component.module.ts delete mode 100644 ui/src/app/components/dependency-list/dependency-list.component.ts delete mode 100644 ui/src/app/components/dependency-list/installed-dependency-item/installed-dependency-item.component.html delete mode 100644 ui/src/app/components/dependency-list/installed-dependency-item/installed-dependency-item.component.module.ts delete mode 100644 ui/src/app/components/dependency-list/installed-dependency-item/installed-dependency-item.component.scss delete mode 100644 ui/src/app/components/dependency-list/installed-dependency-item/installed-dependency-item.component.ts delete mode 100644 ui/src/app/components/dependency-list/marketplace-dependency-item/marketplace-dependency-item.component.html delete mode 100644 ui/src/app/components/dependency-list/marketplace-dependency-item/marketplace-dependency-item.component.module.ts delete mode 100644 ui/src/app/components/dependency-list/marketplace-dependency-item/marketplace-dependency-item.component.scss delete mode 100644 ui/src/app/components/dependency-list/marketplace-dependency-item/marketplace-dependency-item.component.ts delete mode 100644 ui/src/app/components/error-message/error-message.component.html delete mode 100644 ui/src/app/components/error-message/error-message.component.module.ts delete mode 100644 ui/src/app/components/error-message/error-message.component.scss delete mode 100644 ui/src/app/components/error-message/error-message.component.ts delete mode 100644 ui/src/app/components/install-wizard/dependencies/dependencies.component.html delete mode 100644 ui/src/app/components/install-wizard/dependencies/dependencies.component.module.ts delete mode 100644 ui/src/app/components/install-wizard/dependencies/dependencies.component.ts delete mode 100644 ui/src/app/components/update-os-banner/update-os-banner.component.html delete mode 100644 ui/src/app/components/update-os-banner/update-os-banner.component.module.ts delete mode 100644 ui/src/app/components/update-os-banner/update-os-banner.component.scss delete mode 100644 ui/src/app/components/update-os-banner/update-os-banner.component.ts delete mode 100644 ui/src/app/guards/deactivate.guard.ts create mode 100644 ui/src/app/guards/maintenance.guard.ts create mode 100644 ui/src/app/guards/unmaintenance.guard.ts delete mode 100644 ui/src/app/modals/app-backup/app-backup.module.ts delete mode 100644 ui/src/app/modals/app-backup/app-backup.page.html delete mode 100644 ui/src/app/modals/app-backup/app-backup.page.scss delete mode 100644 ui/src/app/modals/app-backup/app-backup.page.ts rename ui/src/app/{components/app-backup-confirmation/app-backup-confirmation.component.html => modals/backup-confirmation/backup-confirmation.component.html} (84%) rename ui/src/app/{components/app-backup-confirmation/app-backup-confirmation.component.module.ts => modals/backup-confirmation/backup-confirmation.component.module.ts} (60%) rename ui/src/app/{components/app-backup-confirmation/app-backup-confirmation.component.scss => modals/backup-confirmation/backup-confirmation.component.scss} (100%) create mode 100644 ui/src/app/modals/backup-confirmation/backup-confirmation.component.ts delete mode 100644 ui/src/app/models/app-types.ts delete mode 100644 ui/src/app/models/model-preload.ts create mode 100644 ui/src/app/models/patch-db/data-model.ts create mode 100644 ui/src/app/models/patch-db/local-storage-bootstrap.ts create mode 100644 ui/src/app/models/patch-db/patch-db-model.factory.ts create mode 100644 ui/src/app/models/patch-db/patch-db-model.ts delete mode 100644 ui/src/app/models/server-model.ts rename ui/src/app/pages/{server-routes/server-config/server-config.module.ts => apps-routes/app-interfaces/app-interfaces.module.ts} (64%) create mode 100644 ui/src/app/pages/apps-routes/app-interfaces/app-interfaces.page.html create mode 100644 ui/src/app/pages/apps-routes/app-interfaces/app-interfaces.page.scss create mode 100644 ui/src/app/pages/apps-routes/app-interfaces/app-interfaces.page.ts delete mode 100644 ui/src/app/pages/apps-routes/app-metrics/app-metrics.page.html delete mode 100644 ui/src/app/pages/apps-routes/app-metrics/app-metrics.page.ts delete mode 100644 ui/src/app/pages/apps-routes/app-metrics/metric-store.ts rename ui/src/app/pages/apps-routes/{app-metrics/app-metrics.module.ts => app-properties/app-properties.module.ts} (79%) create mode 100644 ui/src/app/pages/apps-routes/app-properties/app-properties.page.html rename ui/src/app/pages/apps-routes/{app-metrics/app-metrics.page.scss => app-properties/app-properties.page.scss} (100%) create mode 100644 ui/src/app/pages/apps-routes/app-properties/app-properties.page.ts create mode 100644 ui/src/app/pages/apps-routes/app-properties/property-store.ts create mode 100644 ui/src/app/pages/apps-routes/app-restore/app-restore.module.ts create mode 100644 ui/src/app/pages/apps-routes/app-restore/app-restore.page.html rename ui/src/app/{components/dependency-list/dependency-list.component.scss => pages/apps-routes/app-restore/app-restore.page.scss} (100%) create mode 100644 ui/src/app/pages/apps-routes/app-restore/app-restore.page.ts create mode 100644 ui/src/app/pages/auth-routes/auth-password/auth-password.module.ts create mode 100644 ui/src/app/pages/auth-routes/auth-password/auth-password.page.html create mode 100644 ui/src/app/pages/auth-routes/auth-password/auth-password.page.scss create mode 100644 ui/src/app/pages/auth-routes/auth-password/auth-password.page.ts create mode 100644 ui/src/app/pages/auth-routes/auth-pin/auth-pin.module.ts create mode 100644 ui/src/app/pages/auth-routes/auth-pin/auth-pin.page.html create mode 100644 ui/src/app/pages/auth-routes/auth-pin/auth-pin.page.scss create mode 100644 ui/src/app/pages/auth-routes/auth-pin/auth-pin.page.ts create mode 100644 ui/src/app/pages/auth-routes/auth-routing.module.ts delete mode 100644 ui/src/app/pages/authenticate/authenticate-routing.module.ts delete mode 100644 ui/src/app/pages/authenticate/authenticate.module.ts delete mode 100644 ui/src/app/pages/authenticate/authenticate.page.html delete mode 100644 ui/src/app/pages/authenticate/authenticate.page.ts create mode 100644 ui/src/app/pages/maintenance/maintenance.module.ts create mode 100644 ui/src/app/pages/maintenance/maintenance.page.html rename ui/src/app/pages/{authenticate/authenticate.page.scss => maintenance/maintenance.page.scss} (100%) create mode 100644 ui/src/app/pages/maintenance/maintenance.page.ts create mode 100644 ui/src/app/pages/server-routes/developer-routes/dev-ssh-keys/ssh.service.ts delete mode 100644 ui/src/app/pages/server-routes/external-drives/external-drives.page.html delete mode 100644 ui/src/app/pages/server-routes/external-drives/external-drives.page.ts rename ui/src/app/pages/server-routes/{external-drives/external-drives.module.ts => general-settings/general-settings.module.ts} (62%) rename ui/src/app/pages/server-routes/{server-config/server-config.page.html => general-settings/general-settings.page.html} (50%) rename ui/src/app/pages/server-routes/{external-drives/external-drives.page.scss => general-settings/general-settings.page.scss} (100%) create mode 100644 ui/src/app/pages/server-routes/general-settings/general-settings.page.ts create mode 100644 ui/src/app/pages/server-routes/server-backup/server-backup.module.ts create mode 100644 ui/src/app/pages/server-routes/server-backup/server-backup.page.html rename ui/src/app/pages/server-routes/{server-config/server-config.page.scss => server-backup/server-backup.page.scss} (100%) create mode 100644 ui/src/app/pages/server-routes/server-backup/server-backup.page.ts delete mode 100644 ui/src/app/pages/server-routes/server-config/server-config.page.ts create mode 100644 ui/src/app/pipes/empty.pipe.ts delete mode 100644 ui/src/app/pipes/icon.pipe.ts create mode 100644 ui/src/app/pipes/notification-color.pipe.ts delete mode 100644 ui/src/app/pipes/peek-properties.pipe.ts create mode 100644 ui/src/app/pipes/status.pipe.ts create mode 100644 ui/src/app/pipes/ui.pipe.ts rename ui/src/app/{app-config => pkg-config}/config-cursor.ts (98%) rename ui/src/app/{app-config => pkg-config}/config-types.ts (100%) rename ui/src/app/{app-config => pkg-config}/config-utilities.ts (100%) rename ui/src/app/{app-config => pkg-config}/modal-presentable.ts (100%) delete mode 100644 ui/src/app/services/api/API.def create mode 100644 ui/src/app/services/connection.service.ts delete mode 100644 ui/src/app/services/os-update.service.ts create mode 100644 ui/src/app/services/pkg-status-rendering.service.ts delete mode 100644 ui/src/app/services/pwa-back.service.ts delete mode 100644 ui/src/app/services/sync.notifier.ts delete mode 100644 ui/src/app/services/sync.service.ts delete mode 100644 ui/src/app/util/cleanup.ts delete mode 100644 ui/src/app/util/metrics.util.ts create mode 100644 ui/src/app/util/properties.util.ts delete mode 100644 ui/src/app/util/property-subject.util.ts delete mode 100644 ui/src/app/util/status-rendering.ts delete mode 100644 ui/src/app/util/types.util.ts delete mode 100644 ui/src/assets/icon/eject-outline.svg delete mode 100644 ui/src/assets/icon/eject.svg create mode 100644 ui/src/assets/img/logo.png create mode 100644 ui/src/assets/img/service-icons/bitcoin-proxy.png delete mode 100644 ui/src/assets/img/service-icons/bitwarden.png delete mode 100644 ui/src/assets/img/service-icons/btc-rpc-proxy.png delete mode 100644 ui/src/assets/img/service-icons/c-lightning.png delete mode 100644 ui/src/assets/img/service-icons/cups.png delete mode 100644 ui/src/assets/img/service-icons/filebrowser.png delete mode 100644 ui/src/assets/img/service-icons/lightning-terminal.png delete mode 100644 ui/src/assets/img/service-icons/pastebin.png delete mode 100644 ui/src/assets/img/service-icons/ride-the-lightning.png delete mode 100644 ui/src/assets/logo-full.png delete mode 100644 ui/src/assets/logo.png create mode 100644 ui/ui-config.json delete mode 100644 ui/use-mocks.json diff --git a/ui/package-lock.json b/ui/package-lock.json index 8e9a1e2df..c01d952c0 100644 --- a/ui/package-lock.json +++ b/ui/package-lock.json @@ -1,12 +1,12 @@ { "name": "embassy-ui", - "version": "0.2.17", + "version": "0.2.14", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "embassy-ui", - "version": "0.2.17", + "version": "0.2.14", "dependencies": { "@angular/common": "^11.0.0", "@angular/core": "^11.0.0", @@ -14,28 +14,26 @@ "@angular/platform-browser": "^11.0.0", "@angular/platform-browser-dynamic": "^11.0.0", "@angular/router": "^11.0.0", - "@ionic/angular": "^5.4.0", - "@ionic/storage": "2.2.0", - "@start9labs/emver": "^0.1.1", + "@ionic/angular": "^5.6.0", + "@ionic/storage": "^3.0.0", + "@ionic/storage-angular": "^3.0.0", + "@ngrx/component": "^11.1.1", + "@start9labs/emver": "^0.1.4", "ajv": "^6.12.6", - "angularx-qrcode": "^10.0.11", - "base32.js": "^0.1.0", - "base64url": "^3.0.1", - "bip39": "^3.0.2", - "bitcoinjs-lib": "^5.2.0", + "angularx-qrcode": "^11.0.0", "compare-versions": "^3.5.0", "core-js": "^3.4.0", "handlebars": "^4.7.6", "json-pointer": "^0.6.1", "jsonpointerx": "^1.0.30", - "jsontokens": "^3.0.0", "marked": "^2.0.0", - "rxjs": "^6.6.3", - "uuid": "^8.3.1", + "patch-db-client": "file: ../../../../patch-db-client", + "rxjs": "^6.6.0", + "uuid": "^8.3.0", "zone.js": "^0.11.2" }, "devDependencies": { - "@angular-devkit/build-angular": "^0.1100.0", + "@angular-devkit/build-angular": "^0.1102.0", "@angular/cli": "^11.0.0", "@angular/compiler": "^11.0.0", "@angular/compiler-cli": "^11.0.0", @@ -43,151 +41,166 @@ "@ionic/angular-toolkit": "^3.0.0", "@ionic/lab": "^3.2.9", "@types/json-pointer": "^1.0.30", - "@types/marked": "^1.1.0", - "@types/node": "^14.11.10", + "@types/marked": "^2.0.0", + "@types/node": "^15.0.0", "@types/uuid": "^8.0.0", - "node-html-parser": "2.0.0", + "node-html-parser": "^3.2.0", "ts-node": "^9.1.0", "tslint": "^6.1.0", - "typescript": "4.0.5" + "typescript": "4.1.5" + } + }, + "../../patch-db-client": {}, + "../../patch-db/client": { + "name": "patch-db", + "version": "1.0.0", + "extraneous": true, + "license": "MIT", + "dependencies": { + "rxjs": "^6.6.3", + "sorted-btree": "^1.5.0", + "uuid": "^8.3.2" + }, + "devDependencies": { + "@types/node": "^15.0.0", + "@types/uuid": "^8.3.0", + "ts-node": "^9.1.1", + "tslint": "^6.1.0", + "typescript": "4.1.5" } }, "node_modules/@angular-devkit/architect": { - "version": "0.1100.3", - "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1100.3.tgz", - "integrity": "sha512-PF4PlGOIVW8eYAObP7B/vfk8TaHBEWzr2NOb+kHsIJJmx11iivkHRWzzQmTUlhwnRslCcg5ngwx0IBPDzNVeTg==", + "version": "0.1102.14", "dev": true, + "license": "MIT", "dependencies": { - "@angular-devkit/core": "11.0.3", + "@angular-devkit/core": "11.2.14", "rxjs": "6.6.3" }, "engines": { "node": ">= 10.13.0", - "npm": ">= 6.11.0", + "npm": "^6.11.0 || ^7.5.6", "yarn": ">= 1.13.0" } }, - "node_modules/@angular-devkit/architect/node_modules/@angular-devkit/core": { - "version": "11.0.3", - "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-11.0.3.tgz", - "integrity": "sha512-gJRiBj0gWDR2VtIvLvwwc/GM2MZvg1xw69ZbBJ1VuUgDqPBHdC8q3UMW3B82wdhxK+RBYa7ZOJxtIVggaHkm9g==", + "node_modules/@angular-devkit/architect/node_modules/rxjs": { + "version": "6.6.3", "dev": true, + "license": "Apache-2.0", "dependencies": { - "ajv": "6.12.6", - "fast-json-stable-stringify": "2.1.0", - "magic-string": "0.25.7", - "rxjs": "6.6.3", - "source-map": "0.7.3" + "tslib": "^1.9.0" }, "engines": { - "node": ">= 10.13.0", - "npm": ">= 6.11.0", - "yarn": ">= 1.13.0" + "npm": ">=2.0.0" } }, - "node_modules/@angular-devkit/architect/node_modules/source-map": { - "version": "0.7.3", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", - "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", + "node_modules/@angular-devkit/architect/node_modules/tslib": { + "version": "1.14.1", "dev": true, - "engines": { - "node": ">= 8" - } + "license": "0BSD" }, "node_modules/@angular-devkit/build-angular": { - "version": "0.1100.3", - "resolved": "https://registry.npmjs.org/@angular-devkit/build-angular/-/build-angular-0.1100.3.tgz", - "integrity": "sha512-4Zng6I+QOPFx6uAdNxgKDYXeHYvowU2bANtsG0KFDxc5RN64FyqK2lZlTUPS6SejX14hOyj81/f4MIl25r7Xgg==", + "version": "0.1102.14", "dev": true, + "license": "MIT", "dependencies": { - "@angular-devkit/architect": "0.1100.3", - "@angular-devkit/build-optimizer": "0.1100.3", - "@angular-devkit/build-webpack": "0.1100.3", - "@angular-devkit/core": "11.0.3", - "@babel/core": "7.12.3", - "@babel/generator": "7.12.1", - "@babel/plugin-transform-runtime": "7.12.1", - "@babel/preset-env": "7.12.1", - "@babel/runtime": "7.12.1", - "@babel/template": "7.10.4", + "@angular-devkit/architect": "0.1102.14", + "@angular-devkit/build-optimizer": "0.1102.14", + "@angular-devkit/build-webpack": "0.1102.14", + "@angular-devkit/core": "11.2.14", + "@babel/core": "7.12.10", + "@babel/generator": "7.12.11", + "@babel/plugin-transform-async-to-generator": "7.12.1", + "@babel/plugin-transform-runtime": "7.12.10", + "@babel/preset-env": "7.12.11", + "@babel/runtime": "7.12.5", + "@babel/template": "7.12.7", + "@discoveryjs/json-ext": "0.5.2", "@jsdevtools/coverage-istanbul-loader": "3.0.5", - "@ngtools/webpack": "11.0.3", + "@ngtools/webpack": "11.2.14", "ansi-colors": "4.1.1", - "autoprefixer": "9.8.6", - "babel-loader": "8.1.0", + "autoprefixer": "10.2.4", + "babel-loader": "8.2.2", "browserslist": "^4.9.1", "cacache": "15.0.5", "caniuse-lite": "^1.0.30001032", - "circular-dependency-plugin": "5.2.0", - "copy-webpack-plugin": "6.2.1", - "core-js": "3.6.5", - "css-loader": "4.3.0", - "cssnano": "4.1.10", - "file-loader": "6.1.1", + "circular-dependency-plugin": "5.2.2", + "copy-webpack-plugin": "6.3.2", + "core-js": "3.8.3", + "critters": "0.0.7", + "css-loader": "5.0.1", + "cssnano": "5.0.2", + "file-loader": "6.2.0", "find-cache-dir": "3.3.1", "glob": "7.1.6", + "https-proxy-agent": "5.0.0", "inquirer": "7.3.3", - "jest-worker": "26.5.0", + "jest-worker": "26.6.2", "karma-source-map-support": "1.4.0", - "less": "3.12.2", - "less-loader": "7.0.2", - "license-webpack-plugin": "2.3.1", + "less": "4.1.1", + "less-loader": "7.3.0", + "license-webpack-plugin": "2.3.11", "loader-utils": "2.0.0", - "mini-css-extract-plugin": "1.2.1", + "mini-css-extract-plugin": "1.3.5", "minimatch": "3.0.4", - "open": "7.3.0", - "ora": "5.1.0", + "open": "7.4.0", + "ora": "5.3.0", "parse5-html-rewriting-stream": "6.0.1", "pnp-webpack-plugin": "1.6.4", - "postcss": "7.0.32", - "postcss-import": "12.0.1", - "postcss-loader": "4.0.4", + "postcss": "8.2.15", + "postcss-import": "14.0.0", + "postcss-loader": "4.2.0", "raw-loader": "4.0.2", "regenerator-runtime": "0.13.7", - "resolve-url-loader": "3.1.2", + "resolve-url-loader": "4.0.0", "rimraf": "3.0.2", - "rollup": "2.32.1", + "rollup": "2.38.4", "rxjs": "6.6.3", - "sass": "1.27.0", - "sass-loader": "10.0.5", - "semver": "7.3.2", + "sass": "1.32.6", + "sass-loader": "10.1.1", + "semver": "7.3.4", "source-map": "0.7.3", - "source-map-loader": "1.1.2", + "source-map-loader": "1.1.3", "source-map-support": "0.5.19", - "speed-measure-webpack-plugin": "1.3.3", + "speed-measure-webpack-plugin": "1.4.2", "style-loader": "2.0.0", "stylus": "0.54.8", - "stylus-loader": "4.1.1", - "terser": "5.3.7", + "stylus-loader": "4.3.3", + "terser": "5.5.1", "terser-webpack-plugin": "4.2.3", "text-table": "0.2.0", "tree-kill": "1.2.2", "webpack": "4.44.2", "webpack-dev-middleware": "3.7.2", - "webpack-dev-server": "3.11.0", - "webpack-merge": "5.2.0", - "webpack-sources": "2.0.1", - "webpack-subresource-integrity": "1.5.1", + "webpack-dev-server": "3.11.2", + "webpack-merge": "5.7.3", + "webpack-sources": "2.2.0", + "webpack-subresource-integrity": "1.5.2", "worker-plugin": "5.0.0" }, "engines": { "node": ">= 10.13.0", - "npm": ">= 6.11.0", + "npm": "^6.11.0 || ^7.5.6", "yarn": ">= 1.13.0" }, "peerDependencies": { - "@angular/compiler-cli": "^11.0.0", - "@angular/localize": "^11.0.0", - "karma": "~5.1.0", - "ng-packagr": "^11.0.0", + "@angular/compiler-cli": "^11.0.0 || ^11.2.0-next", + "@angular/localize": "^11.0.0 || ^11.2.0-next", + "@angular/service-worker": "^11.0.0 || ^11.2.0-next", + "karma": "^5.2.0 || ^6.0.0", + "ng-packagr": "^11.0.0 || ^11.2.0-next", "protractor": "^7.0.0", + "tailwindcss": "^2.0.0", "tslint": "^6.1.0", - "typescript": "~4.0.0" + "typescript": "~4.0.0 || ~4.1.0" }, "peerDependenciesMeta": { "@angular/localize": { "optional": true }, + "@angular/service-worker": { + "optional": true + }, "karma": { "optional": true }, @@ -197,352 +210,72 @@ "protractor": { "optional": true }, + "tailwindcss": { + "optional": true + }, "tslint": { "optional": true } } }, - "node_modules/@angular-devkit/build-angular/node_modules/@angular-devkit/core": { - "version": "11.0.3", - "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-11.0.3.tgz", - "integrity": "sha512-gJRiBj0gWDR2VtIvLvwwc/GM2MZvg1xw69ZbBJ1VuUgDqPBHdC8q3UMW3B82wdhxK+RBYa7ZOJxtIVggaHkm9g==", - "dev": true, - "dependencies": { - "ajv": "6.12.6", - "fast-json-stable-stringify": "2.1.0", - "magic-string": "0.25.7", - "rxjs": "6.6.3", - "source-map": "0.7.3" - }, - "engines": { - "node": ">= 10.13.0", - "npm": ">= 6.11.0", - "yarn": ">= 1.13.0" - } - }, - "node_modules/@angular-devkit/build-angular/node_modules/ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/@angular-devkit/build-angular/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/@angular-devkit/build-angular/node_modules/chalk": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", - "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/@angular-devkit/build-angular/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/@angular-devkit/build-angular/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/@angular-devkit/build-angular/node_modules/copy-webpack-plugin": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-6.2.1.tgz", - "integrity": "sha512-VH2ZTMIBsx4p++Lmpg77adZ0KUyM5gFR/9cuTrbneNnJlcQXUFvsNariPqq2dq2kV3F2skHiDGPQCyKWy1+U0Q==", - "dev": true, - "dependencies": { - "cacache": "^15.0.5", - "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.2", - "schema-utils": "^3.0.0", - "serialize-javascript": "^5.0.1", - "webpack-sources": "^1.4.3" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^4.37.0 || ^5.0.0" - } - }, - "node_modules/@angular-devkit/build-angular/node_modules/copy-webpack-plugin/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/@angular-devkit/build-angular/node_modules/copy-webpack-plugin/node_modules/webpack-sources": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.4.3.tgz", - "integrity": "sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==", - "dev": true, - "dependencies": { - "source-list-map": "^2.0.0", - "source-map": "~0.6.1" - } - }, "node_modules/@angular-devkit/build-angular/node_modules/core-js": { - "version": "3.6.5", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.6.5.tgz", - "integrity": "sha512-vZVEEwZoIsI+vPEuoF9Iqf5H7/M3eeQqWlQnYa8FSKKePuYTf5MWnxb5SDAzCa60b3JBRS5g9b+Dq7b1y/RCrA==", + "version": "3.8.3", "dev": true, "hasInstallScript": true, + "license": "MIT", "funding": { "type": "opencollective", "url": "https://opencollective.com/core-js" } }, - "node_modules/@angular-devkit/build-angular/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/@angular-devkit/build-angular/node_modules/ora": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/ora/-/ora-5.1.0.tgz", - "integrity": "sha512-9tXIMPvjZ7hPTbk8DFq1f7Kow/HU/pQYB60JbNq+QnGwcyhWVZaQ4hM9zQDEsPxw/muLpgiHSaumUZxCAmod/w==", + "node_modules/@angular-devkit/build-angular/node_modules/rxjs": { + "version": "6.6.3", "dev": true, + "license": "Apache-2.0", "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" + "tslib": "^1.9.0" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "npm": ">=2.0.0" } }, - "node_modules/@angular-devkit/build-angular/node_modules/p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "node_modules/@angular-devkit/build-angular/node_modules/tslib": { + "version": "1.14.1", "dev": true, - "dependencies": { - "yocto-queue": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@angular-devkit/build-angular/node_modules/schema-utils": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.0.0.tgz", - "integrity": "sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA==", - "dev": true, - "dependencies": { - "@types/json-schema": "^7.0.6", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/@angular-devkit/build-angular/node_modules/serialize-javascript": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-5.0.1.tgz", - "integrity": "sha512-SaaNal9imEO737H2c05Og0/8LUXG7EnsZyMa8MzkmuHoELfT6txuj0cMqRj6zfPKnmQ1yasR4PCJc8x+M4JSPA==", - "dev": true, - "dependencies": { - "randombytes": "^2.1.0" - } - }, - "node_modules/@angular-devkit/build-angular/node_modules/source-map": { - "version": "0.7.3", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", - "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", - "dev": true, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@angular-devkit/build-angular/node_modules/strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", - "dev": true, - "dependencies": { - "ansi-regex": "^5.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@angular-devkit/build-angular/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@angular-devkit/build-angular/node_modules/webpack-sources": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-2.0.1.tgz", - "integrity": "sha512-A9oYz7ANQBK5EN19rUXbvNgfdfZf5U2gP0769OXsj9CvYkCR6OHOsd6OKyEy4H38GGxpsQPKIL83NC64QY6Xmw==", - "dev": true, - "dependencies": { - "source-list-map": "^2.0.1", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/@angular-devkit/build-angular/node_modules/webpack-sources/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } + "license": "0BSD" }, "node_modules/@angular-devkit/build-optimizer": { - "version": "0.1100.3", - "resolved": "https://registry.npmjs.org/@angular-devkit/build-optimizer/-/build-optimizer-0.1100.3.tgz", - "integrity": "sha512-ACvi4W8iDqWJOqHZA7LLI1lldbjrouANxOb1wxgFyr6krKypU6kDXOF2ZWNdrsgDvW0zwJPKeDNFzYyvqQpe/w==", + "version": "0.1102.14", "dev": true, + "license": "MIT", "dependencies": { "loader-utils": "2.0.0", "source-map": "0.7.3", - "tslib": "2.0.3", - "typescript": "4.0.5", - "webpack-sources": "2.0.1" + "tslib": "2.1.0", + "typescript": "4.1.5", + "webpack-sources": "2.2.0" }, "bin": { "build-optimizer": "src/build-optimizer/cli.js" }, "engines": { "node": ">= 10.13.0", - "npm": ">= 6.11.0", + "npm": "^6.11.0 || ^7.5.6", "yarn": ">= 1.13.0" } }, - "node_modules/@angular-devkit/build-optimizer/node_modules/source-map": { - "version": "0.7.3", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", - "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", - "dev": true, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@angular-devkit/build-optimizer/node_modules/typescript": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.0.5.tgz", - "integrity": "sha512-ywmr/VrTVCmNTJ6iV2LwIrfG1P+lv6luD8sUJs+2eI9NLGigaN+nUQc13iHqisq7bra9lnmUSYqbJvegraBOPQ==", - "dev": true, - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=4.2.0" - } - }, - "node_modules/@angular-devkit/build-optimizer/node_modules/webpack-sources": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-2.0.1.tgz", - "integrity": "sha512-A9oYz7ANQBK5EN19rUXbvNgfdfZf5U2gP0769OXsj9CvYkCR6OHOsd6OKyEy4H38GGxpsQPKIL83NC64QY6Xmw==", - "dev": true, - "dependencies": { - "source-list-map": "^2.0.1", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/@angular-devkit/build-optimizer/node_modules/webpack-sources/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/@angular-devkit/build-webpack": { - "version": "0.1100.3", - "resolved": "https://registry.npmjs.org/@angular-devkit/build-webpack/-/build-webpack-0.1100.3.tgz", - "integrity": "sha512-X26Vplgu8x88AMSaMOdR28XIENAHYIAW98HloFOMIuqAubZYeoxaNIYleVO5haowU3YOLsD/FijmRKNXWUnYXg==", + "version": "0.1102.14", "dev": true, + "license": "MIT", "dependencies": { - "@angular-devkit/architect": "0.1100.3", - "@angular-devkit/core": "11.0.3", + "@angular-devkit/architect": "0.1102.14", + "@angular-devkit/core": "11.2.14", "rxjs": "6.6.3" }, "engines": { "node": ">= 10.13.0", - "npm": ">= 6.11.0", + "npm": "^6.11.0 || ^7.5.6", "yarn": ">= 1.13.0" }, "peerDependencies": { @@ -550,38 +283,26 @@ "webpack-dev-server": "^3.1.4" } }, - "node_modules/@angular-devkit/build-webpack/node_modules/@angular-devkit/core": { - "version": "11.0.3", - "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-11.0.3.tgz", - "integrity": "sha512-gJRiBj0gWDR2VtIvLvwwc/GM2MZvg1xw69ZbBJ1VuUgDqPBHdC8q3UMW3B82wdhxK+RBYa7ZOJxtIVggaHkm9g==", + "node_modules/@angular-devkit/build-webpack/node_modules/rxjs": { + "version": "6.6.3", "dev": true, + "license": "Apache-2.0", "dependencies": { - "ajv": "6.12.6", - "fast-json-stable-stringify": "2.1.0", - "magic-string": "0.25.7", - "rxjs": "6.6.3", - "source-map": "0.7.3" + "tslib": "^1.9.0" }, "engines": { - "node": ">= 10.13.0", - "npm": ">= 6.11.0", - "yarn": ">= 1.13.0" + "npm": ">=2.0.0" } }, - "node_modules/@angular-devkit/build-webpack/node_modules/source-map": { - "version": "0.7.3", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", - "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", + "node_modules/@angular-devkit/build-webpack/node_modules/tslib": { + "version": "1.14.1", "dev": true, - "engines": { - "node": ">= 8" - } + "license": "0BSD" }, "node_modules/@angular-devkit/core": { - "version": "11.2.4", - "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-11.2.4.tgz", - "integrity": "sha512-98mGDV4XtKWiQ/2D6yzvOHrnJovXchaAN9AjscAHd2an8Fkiq72d9m2wREpk+2J40NWTDB6J5iesTh3qbi8+CA==", + "version": "11.2.14", "dev": true, + "license": "MIT", "dependencies": { "ajv": "6.12.6", "fast-json-stable-stringify": "2.1.0", @@ -595,22 +316,28 @@ "yarn": ">= 1.13.0" } }, - "node_modules/@angular-devkit/core/node_modules/source-map": { - "version": "0.7.3", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", - "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", + "node_modules/@angular-devkit/core/node_modules/rxjs": { + "version": "6.6.3", "dev": true, + "license": "Apache-2.0", + "dependencies": { + "tslib": "^1.9.0" + }, "engines": { - "node": ">= 8" + "npm": ">=2.0.0" } }, - "node_modules/@angular-devkit/schematics": { - "version": "11.2.4", - "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-11.2.4.tgz", - "integrity": "sha512-M9Ike1TYawOIHzenlZS1ufQbsS+Z11/doj5w/UrU0q2OEKc6U375t5qVGgKo3PLHHS8osb9aW9xYwBfVlKrryQ==", + "node_modules/@angular-devkit/core/node_modules/tslib": { + "version": "1.14.1", "dev": true, + "license": "0BSD" + }, + "node_modules/@angular-devkit/schematics": { + "version": "11.2.14", + "dev": true, + "license": "MIT", "dependencies": { - "@angular-devkit/core": "11.2.4", + "@angular-devkit/core": "11.2.14", "ora": "5.3.0", "rxjs": "6.6.3" }, @@ -620,18 +347,33 @@ "yarn": ">= 1.13.0" } }, + "node_modules/@angular-devkit/schematics/node_modules/rxjs": { + "version": "6.6.3", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "tslib": "^1.9.0" + }, + "engines": { + "npm": ">=2.0.0" + } + }, + "node_modules/@angular-devkit/schematics/node_modules/tslib": { + "version": "1.14.1", + "dev": true, + "license": "0BSD" + }, "node_modules/@angular/cli": { - "version": "11.2.4", - "resolved": "https://registry.npmjs.org/@angular/cli/-/cli-11.2.4.tgz", - "integrity": "sha512-bbW93N3n/9GDk6OxQ5WzTWQcHXcj389Tg7gCov9MlRZg1ohqU/RtmQrMazzCCQjFUvJjEOT4a/lYbGYOYhMqag==", + "version": "11.2.14", "dev": true, "hasInstallScript": true, + "license": "MIT", "dependencies": { - "@angular-devkit/architect": "0.1102.4", - "@angular-devkit/core": "11.2.4", - "@angular-devkit/schematics": "11.2.4", - "@schematics/angular": "11.2.4", - "@schematics/update": "0.1102.4", + "@angular-devkit/architect": "0.1102.14", + "@angular-devkit/core": "11.2.14", + "@angular-devkit/schematics": "11.2.14", + "@schematics/angular": "11.2.14", + "@schematics/update": "0.1102.14", "@yarnpkg/lockfile": "1.1.0", "ansi-colors": "4.1.1", "debug": "4.3.1", @@ -659,77 +401,28 @@ "yarn": ">= 1.13.0" } }, - "node_modules/@angular/cli/node_modules/@angular-devkit/architect": { - "version": "0.1102.4", - "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1102.4.tgz", - "integrity": "sha512-A/nc/s9S9+H6xFOxcXqyfiCg9lXzCpO2ZVeaNamZB8f8tHoGfFMQ3JkCGhFiYsbze4fXhcwszNq1o36lGIW7FA==", - "dev": true, - "dependencies": { - "@angular-devkit/core": "11.2.4", - "rxjs": "6.6.3" - }, - "engines": { - "node": ">= 10.13.0", - "npm": "^6.11.0 || ^7.5.6", - "yarn": ">= 1.13.0" - } - }, - "node_modules/@angular/cli/node_modules/open": { - "version": "7.4.0", - "resolved": "https://registry.npmjs.org/open/-/open-7.4.0.tgz", - "integrity": "sha512-PGoBCX/lclIWlpS/R2PQuIR4NJoXh6X5AwVzE7WXnWRGvHg7+4TBCgsujUgiPpm0K1y4qvQeWnCWVTpTKZBtvA==", - "dev": true, - "dependencies": { - "is-docker": "^2.0.0", - "is-wsl": "^2.1.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@angular/cli/node_modules/semver": { - "version": "7.3.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.4.tgz", - "integrity": "sha512-tCfb2WLjqFAtXn4KEdxIhalnRtoKFN7nAwj0B3ZXCbQloV2tq5eDbcTmT68JJD3nRJq24/XgxtQKFIpQdtvmVw==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/@angular/common": { - "version": "11.0.3", - "resolved": "https://registry.npmjs.org/@angular/common/-/common-11.0.3.tgz", - "integrity": "sha512-g5j6pwN6GOcqIDMV87/ZELm/VlWBvMj2vewIBr0a9KSA/pdAe6rvWR9kfnK9G6GFLv6ST3mq8HWe7NGyF1jpTw==", + "version": "11.2.14", + "license": "MIT", "dependencies": { "tslib": "^2.0.0" }, "peerDependencies": { - "@angular/core": "11.0.3", + "@angular/core": "11.2.14", "rxjs": "^6.5.3" } }, "node_modules/@angular/compiler": { - "version": "11.0.3", - "resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-11.0.3.tgz", - "integrity": "sha512-OjfG4TzCzqNyHO4NmQNM7kdaWlbGrfXyB2i2Kd30PS9Z8s9cuhBBZS23P8NEEYNy1PjhI26cmiozrdMZl0hTUw==", + "version": "11.2.14", + "license": "MIT", "dependencies": { "tslib": "^2.0.0" } }, "node_modules/@angular/compiler-cli": { - "version": "11.0.3", - "resolved": "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-11.0.3.tgz", - "integrity": "sha512-i4AOShdsFcEecnu5Ulq5pRrtJBmF3F6KQTysSenzZ+Wdtne8Dk5Vx0kEIwtEFqdQwzzTshTJL5L0FCSE3mgOBw==", + "version": "11.2.14", "dev": true, + "license": "MIT", "dependencies": { "@babel/core": "^7.8.6", "@babel/types": "^7.8.6", @@ -745,7 +438,7 @@ "source-map": "^0.6.1", "sourcemap-codec": "^1.4.8", "tslib": "^2.0.0", - "yargs": "^16.1.1" + "yargs": "^16.2.0" }, "bin": { "ivy-ngcc": "ngcc/main-ivy-ngcc.js", @@ -757,209 +450,65 @@ "node": ">=10.0" }, "peerDependencies": { - "@angular/compiler": "11.0.3", - "typescript": ">=4.0 <4.1" - } - }, - "node_modules/@angular/compiler-cli/node_modules/ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/@angular/compiler-cli/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/@angular/compiler-cli/node_modules/cliui": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", - "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", - "dev": true, - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^7.0.0" - } - }, - "node_modules/@angular/compiler-cli/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/@angular/compiler-cli/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/@angular/compiler-cli/node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true - }, - "node_modules/@angular/compiler-cli/node_modules/is-fullwidth-code-point": { - "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==", - "dev": true, - "engines": { - "node": ">=8" + "@angular/compiler": "11.2.14", + "typescript": ">=4.0 <4.2" } }, "node_modules/@angular/compiler-cli/node_modules/semver": { "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", "dev": true, + "license": "ISC", "bin": { "semver": "bin/semver.js" } }, - "node_modules/@angular/compiler-cli/node_modules/string-width": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", - "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", + "node_modules/@angular/compiler-cli/node_modules/source-map": { + "version": "0.6.1", "dev": true, - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.0" - }, + "license": "BSD-3-Clause", "engines": { - "node": ">=8" - } - }, - "node_modules/@angular/compiler-cli/node_modules/strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", - "dev": true, - "dependencies": { - "ansi-regex": "^5.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@angular/compiler-cli/node_modules/wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/@angular/compiler-cli/node_modules/y18n": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.5.tgz", - "integrity": "sha512-hsRUr4FFrvhhRH12wOdfs38Gy7k2FFzB9qgN9v3aLykRq0dRcdcpz5C9FxdS2NuhOrI/628b/KSTJ3rwHysYSg==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/@angular/compiler-cli/node_modules/yargs": { - "version": "16.1.1", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.1.1.tgz", - "integrity": "sha512-hAD1RcFP/wfgfxgMVswPE+z3tlPFtxG8/yWUrG2i17sTWGCGqWnxKcLTF4cUKDUK8fzokwsmO9H0TDkRbMHy8w==", - "dev": true, - "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" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@angular/compiler-cli/node_modules/yargs-parser": { - "version": "20.2.4", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz", - "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==", - "dev": true, - "engines": { - "node": ">=10" + "node": ">=0.10.0" } }, "node_modules/@angular/core": { - "version": "11.0.3", - "resolved": "https://registry.npmjs.org/@angular/core/-/core-11.0.3.tgz", - "integrity": "sha512-bxo5euE7+Q2ThowkVRwwvKyF5vQEyo9V14JM3GW8k2THbk7LfNctyNkTeuvkTBWfLF17Nd7b5+BdNttNKNlCuQ==", + "version": "11.2.14", + "license": "MIT", "dependencies": { "tslib": "^2.0.0" }, "peerDependencies": { "rxjs": "^6.5.3", - "zone.js": "~0.10.3" + "zone.js": "^0.10.2 || ^0.11.3" } }, "node_modules/@angular/forms": { - "version": "11.0.3", - "resolved": "https://registry.npmjs.org/@angular/forms/-/forms-11.0.3.tgz", - "integrity": "sha512-r0ntMYQq/P4mA2Cnryt6Zh2jJHgeKX/IN4ulCxKl59oxC1NskIfbIMk3UNHvCSFpsrzgKl6Btqyf+RYIc3kIxA==", + "version": "11.2.14", + "license": "MIT", "dependencies": { "tslib": "^2.0.0" }, "peerDependencies": { - "@angular/common": "11.0.3", - "@angular/core": "11.0.3", - "@angular/platform-browser": "11.0.3", + "@angular/common": "11.2.14", + "@angular/core": "11.2.14", + "@angular/platform-browser": "11.2.14", "rxjs": "^6.5.3" } }, "node_modules/@angular/language-service": { - "version": "11.0.3", - "resolved": "https://registry.npmjs.org/@angular/language-service/-/language-service-11.0.3.tgz", - "integrity": "sha512-9tCPCiFwXco3QJhVIAFBjUGD3RS3SBOoaUsNAB0mGTGT6xOgayo37Z5UuOOHKHdlEpTlCFVLnSVm8DMZ4ehYpw==", - "dev": true + "version": "11.2.14", + "dev": true, + "license": "MIT" }, "node_modules/@angular/platform-browser": { - "version": "11.0.3", - "resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-11.0.3.tgz", - "integrity": "sha512-cwpYnVomsIEc9kckwqKCX9pRsd6iOtGMRJs0HOMtOC9v43osBpTSfZvYuARJNwJBO+Gb4AZvbIPuFe0XnZtYYA==", + "version": "11.2.14", + "license": "MIT", "dependencies": { "tslib": "^2.0.0" }, "peerDependencies": { - "@angular/animations": "11.0.3", - "@angular/common": "11.0.3", - "@angular/core": "11.0.3" + "@angular/animations": "11.2.14", + "@angular/common": "11.2.14", + "@angular/core": "11.2.14" }, "peerDependenciesMeta": { "@angular/animations": { @@ -968,68 +517,68 @@ } }, "node_modules/@angular/platform-browser-dynamic": { - "version": "11.0.3", - "resolved": "https://registry.npmjs.org/@angular/platform-browser-dynamic/-/platform-browser-dynamic-11.0.3.tgz", - "integrity": "sha512-hqmlSxLhiG79Dp5He3zWn6OAHeAvjYurrQnJtLCr4ExVIi04rNWX+BjwUqCGyVMobe0T70JJAz+Bkl6vFiV3zw==", + "version": "11.2.14", + "license": "MIT", "dependencies": { "tslib": "^2.0.0" }, "peerDependencies": { - "@angular/common": "11.0.3", - "@angular/compiler": "11.0.3", - "@angular/core": "11.0.3", - "@angular/platform-browser": "11.0.3" + "@angular/common": "11.2.14", + "@angular/compiler": "11.2.14", + "@angular/core": "11.2.14", + "@angular/platform-browser": "11.2.14" } }, "node_modules/@angular/router": { - "version": "11.0.3", - "resolved": "https://registry.npmjs.org/@angular/router/-/router-11.0.3.tgz", - "integrity": "sha512-iw9jed7sels2CcLJmr0m4TXfoiu8u40a84D0PsEEm1FGEXe4KJQ/jiLQTfiFQywxBd4cvlUdbl4lPHoUN0bspw==", + "version": "11.2.14", + "license": "MIT", "dependencies": { "tslib": "^2.0.0" }, "peerDependencies": { - "@angular/common": "11.0.3", - "@angular/core": "11.0.3", - "@angular/platform-browser": "11.0.3", + "@angular/common": "11.2.14", + "@angular/core": "11.2.14", + "@angular/platform-browser": "11.2.14", "rxjs": "^6.5.3" } }, "node_modules/@babel/code-frame": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz", - "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==", + "version": "7.14.5", "dev": true, + "license": "MIT", "dependencies": { - "@babel/highlight": "^7.10.4" + "@babel/highlight": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" } }, "node_modules/@babel/compat-data": { - "version": "7.12.7", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.12.7.tgz", - "integrity": "sha512-YaxPMGs/XIWtYqrdEOZOCPsVWfEoriXopnsz3/i7apYPXQ3698UFhS6dVT1KN5qOsWmVgw/FOrmQgpRaZayGsw==", - "dev": true + "version": "7.14.7", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } }, "node_modules/@babel/core": { - "version": "7.12.3", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.12.3.tgz", - "integrity": "sha512-0qXcZYKZp3/6N2jKYVxZv0aNCsxTSVCiK72DTiTYZAu7sjg73W0/aynWjMbiGd87EQL4WyA8reiJVh92AVla9g==", + "version": "7.12.10", "dev": true, + "license": "MIT", "dependencies": { "@babel/code-frame": "^7.10.4", - "@babel/generator": "^7.12.1", + "@babel/generator": "^7.12.10", "@babel/helper-module-transforms": "^7.12.1", - "@babel/helpers": "^7.12.1", - "@babel/parser": "^7.12.3", - "@babel/template": "^7.10.4", - "@babel/traverse": "^7.12.1", - "@babel/types": "^7.12.1", + "@babel/helpers": "^7.12.5", + "@babel/parser": "^7.12.10", + "@babel/template": "^7.12.7", + "@babel/traverse": "^7.12.10", + "@babel/types": "^7.12.10", "convert-source-map": "^1.7.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.1", "json5": "^2.1.2", "lodash": "^4.17.19", - "resolve": "^1.3.2", "semver": "^5.4.1", "source-map": "^0.5.0" }, @@ -1043,314 +592,397 @@ }, "node_modules/@babel/core/node_modules/semver": { "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", "dev": true, + "license": "ISC", "bin": { "semver": "bin/semver" } }, "node_modules/@babel/core/node_modules/source-map": { "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", "dev": true, + "license": "BSD-3-Clause", "engines": { "node": ">=0.10.0" } }, "node_modules/@babel/generator": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.12.1.tgz", - "integrity": "sha512-DB+6rafIdc9o72Yc3/Ph5h+6hUjeOp66pF0naQBgUFFuPqzQwIlPTm3xZR7YNvduIMtkDIj2t21LSQwnbCrXvg==", + "version": "7.12.11", "dev": true, + "license": "MIT", "dependencies": { - "@babel/types": "^7.12.1", + "@babel/types": "^7.12.11", "jsesc": "^2.5.1", "source-map": "^0.5.0" } }, "node_modules/@babel/generator/node_modules/source-map": { "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", "dev": true, + "license": "BSD-3-Clause", "engines": { "node": ">=0.10.0" } }, "node_modules/@babel/helper-annotate-as-pure": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.10.4.tgz", - "integrity": "sha512-XQlqKQP4vXFB7BN8fEEerrmYvHp3fK/rBkRFz9jaJbzK0B1DSfej9Kc7ZzE8Z/OnId1jpJdNAZ3BFQjWG68rcA==", + "version": "7.14.5", "dev": true, + "license": "MIT", "dependencies": { - "@babel/types": "^7.10.4" + "@babel/types": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" } }, "node_modules/@babel/helper-builder-binary-assignment-operator-visitor": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.10.4.tgz", - "integrity": "sha512-L0zGlFrGWZK4PbT8AszSfLTM5sDU1+Az/En9VrdT8/LmEiJt4zXt+Jve9DCAnQcbqDhCI+29y/L93mrDzddCcg==", + "version": "7.14.5", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-explode-assignable-expression": "^7.10.4", - "@babel/types": "^7.10.4" + "@babel/helper-explode-assignable-expression": "^7.14.5", + "@babel/types": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" } }, "node_modules/@babel/helper-compilation-targets": { - "version": "7.12.5", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.12.5.tgz", - "integrity": "sha512-+qH6NrscMolUlzOYngSBMIOQpKUGPPsc61Bu5W10mg84LxZ7cmvnBHzARKbDoFxVvqqAbj6Tg6N7bSrWSPXMyw==", + "version": "7.14.5", "dev": true, + "license": "MIT", "dependencies": { - "@babel/compat-data": "^7.12.5", - "@babel/helper-validator-option": "^7.12.1", - "browserslist": "^4.14.5", - "semver": "^5.5.0" + "@babel/compat-data": "^7.14.5", + "@babel/helper-validator-option": "^7.14.5", + "browserslist": "^4.16.6", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0" } }, "node_modules/@babel/helper-compilation-targets/node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "version": "6.3.0", "dev": true, + "license": "ISC", "bin": { - "semver": "bin/semver" + "semver": "bin/semver.js" } }, "node_modules/@babel/helper-create-class-features-plugin": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.12.1.tgz", - "integrity": "sha512-hkL++rWeta/OVOBTRJc9a5Azh5mt5WgZUGAKMD8JM141YsE08K//bp1unBBieO6rUKkIPyUE0USQ30jAy3Sk1w==", + "version": "7.14.6", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-function-name": "^7.10.4", - "@babel/helper-member-expression-to-functions": "^7.12.1", - "@babel/helper-optimise-call-expression": "^7.10.4", - "@babel/helper-replace-supers": "^7.12.1", - "@babel/helper-split-export-declaration": "^7.10.4" + "@babel/helper-annotate-as-pure": "^7.14.5", + "@babel/helper-function-name": "^7.14.5", + "@babel/helper-member-expression-to-functions": "^7.14.5", + "@babel/helper-optimise-call-expression": "^7.14.5", + "@babel/helper-replace-supers": "^7.14.5", + "@babel/helper-split-export-declaration": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0" } }, "node_modules/@babel/helper-create-regexp-features-plugin": { - "version": "7.12.7", - "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.12.7.tgz", - "integrity": "sha512-idnutvQPdpbduutvi3JVfEgcVIHooQnhvhx0Nk9isOINOIGYkZea1Pk2JlJRiUnMefrlvr0vkByATBY/mB4vjQ==", + "version": "7.14.5", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-annotate-as-pure": "^7.10.4", + "@babel/helper-annotate-as-pure": "^7.14.5", "regexpu-core": "^4.7.1" }, + "engines": { + "node": ">=6.9.0" + }, "peerDependencies": { "@babel/core": "^7.0.0" } }, - "node_modules/@babel/helper-define-map": { - "version": "7.10.5", - "resolved": "https://registry.npmjs.org/@babel/helper-define-map/-/helper-define-map-7.10.5.tgz", - "integrity": "sha512-fMw4kgFB720aQFXSVaXr79pjjcW5puTCM16+rECJ/plGS+zByelE8l9nCpV1GibxTnFVmUuYG9U8wYfQHdzOEQ==", - "dev": true, - "dependencies": { - "@babel/helper-function-name": "^7.10.4", - "@babel/types": "^7.10.5", - "lodash": "^4.17.19" - } - }, "node_modules/@babel/helper-explode-assignable-expression": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.12.1.tgz", - "integrity": "sha512-dmUwH8XmlrUpVqgtZ737tK88v07l840z9j3OEhCLwKTkjlvKpfqXVIZ0wpK3aeOxspwGrf/5AP5qLx4rO3w5rA==", + "version": "7.14.5", "dev": true, + "license": "MIT", "dependencies": { - "@babel/types": "^7.12.1" + "@babel/types": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" } }, "node_modules/@babel/helper-function-name": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.10.4.tgz", - "integrity": "sha512-YdaSyz1n8gY44EmN7x44zBn9zQ1Ry2Y+3GTA+3vH6Mizke1Vw0aWDM66FOYEPw8//qKkmqOckrGgTYa+6sceqQ==", + "version": "7.14.5", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-get-function-arity": "^7.10.4", - "@babel/template": "^7.10.4", - "@babel/types": "^7.10.4" + "@babel/helper-get-function-arity": "^7.14.5", + "@babel/template": "^7.14.5", + "@babel/types": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-function-name/node_modules/@babel/template": { + "version": "7.14.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.14.5", + "@babel/parser": "^7.14.5", + "@babel/types": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" } }, "node_modules/@babel/helper-get-function-arity": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.4.tgz", - "integrity": "sha512-EkN3YDB+SRDgiIUnNgcmiD361ti+AVbL3f3Henf6dqqUyr5dMsorno0lJWJuLhDhkI5sYEpgj6y9kB8AOU1I2A==", + "version": "7.14.5", "dev": true, + "license": "MIT", "dependencies": { - "@babel/types": "^7.10.4" + "@babel/types": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" } }, "node_modules/@babel/helper-hoist-variables": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.10.4.tgz", - "integrity": "sha512-wljroF5PgCk2juF69kanHVs6vrLwIPNp6DLD+Lrl3hoQ3PpPPikaDRNFA+0t81NOoMt2DL6WW/mdU8k4k6ZzuA==", + "version": "7.14.5", "dev": true, + "license": "MIT", "dependencies": { - "@babel/types": "^7.10.4" + "@babel/types": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" } }, "node_modules/@babel/helper-member-expression-to-functions": { - "version": "7.12.7", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.12.7.tgz", - "integrity": "sha512-DCsuPyeWxeHgh1Dus7APn7iza42i/qXqiFPWyBDdOFtvS581JQePsc1F/nD+fHrcswhLlRc2UpYS1NwERxZhHw==", + "version": "7.14.7", "dev": true, + "license": "MIT", "dependencies": { - "@babel/types": "^7.12.7" + "@babel/types": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" } }, "node_modules/@babel/helper-module-imports": { - "version": "7.12.5", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.12.5.tgz", - "integrity": "sha512-SR713Ogqg6++uexFRORf/+nPXMmWIn80TALu0uaFb+iQIUoR7bOC7zBWyzBs5b3tBBJXuyD0cRu1F15GyzjOWA==", + "version": "7.14.5", "dev": true, + "license": "MIT", "dependencies": { - "@babel/types": "^7.12.5" + "@babel/types": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" } }, "node_modules/@babel/helper-module-transforms": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.12.1.tgz", - "integrity": "sha512-QQzehgFAZ2bbISiCpmVGfiGux8YVFXQ0abBic2Envhej22DVXV9nCFaS5hIQbkyo1AdGb+gNME2TSh3hYJVV/w==", + "version": "7.14.5", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-module-imports": "^7.12.1", - "@babel/helper-replace-supers": "^7.12.1", - "@babel/helper-simple-access": "^7.12.1", - "@babel/helper-split-export-declaration": "^7.11.0", - "@babel/helper-validator-identifier": "^7.10.4", - "@babel/template": "^7.10.4", - "@babel/traverse": "^7.12.1", - "@babel/types": "^7.12.1", - "lodash": "^4.17.19" + "@babel/helper-module-imports": "^7.14.5", + "@babel/helper-replace-supers": "^7.14.5", + "@babel/helper-simple-access": "^7.14.5", + "@babel/helper-split-export-declaration": "^7.14.5", + "@babel/helper-validator-identifier": "^7.14.5", + "@babel/template": "^7.14.5", + "@babel/traverse": "^7.14.5", + "@babel/types": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms/node_modules/@babel/template": { + "version": "7.14.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.14.5", + "@babel/parser": "^7.14.5", + "@babel/types": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" } }, "node_modules/@babel/helper-optimise-call-expression": { - "version": "7.12.7", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.12.7.tgz", - "integrity": "sha512-I5xc9oSJ2h59OwyUqjv95HRyzxj53DAubUERgQMrpcCEYQyToeHA+NEcUEsVWB4j53RDeskeBJ0SgRAYHDBckw==", + "version": "7.14.5", "dev": true, + "license": "MIT", "dependencies": { - "@babel/types": "^7.12.7" + "@babel/types": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" } }, "node_modules/@babel/helper-plugin-utils": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz", - "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg==", - "dev": true + "version": "7.14.5", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } }, "node_modules/@babel/helper-remap-async-to-generator": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.12.1.tgz", - "integrity": "sha512-9d0KQCRM8clMPcDwo8SevNs+/9a8yWVVmaE80FGJcEP8N1qToREmWEGnBn8BUlJhYRFz6fqxeRL1sl5Ogsed7A==", + "version": "7.14.5", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-annotate-as-pure": "^7.10.4", - "@babel/helper-wrap-function": "^7.10.4", - "@babel/types": "^7.12.1" + "@babel/helper-annotate-as-pure": "^7.14.5", + "@babel/helper-wrap-function": "^7.14.5", + "@babel/types": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" } }, "node_modules/@babel/helper-replace-supers": { - "version": "7.12.5", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.12.5.tgz", - "integrity": "sha512-5YILoed0ZyIpF4gKcpZitEnXEJ9UoDRki1Ey6xz46rxOzfNMAhVIJMoune1hmPVxh40LRv1+oafz7UsWX+vyWA==", + "version": "7.14.5", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-member-expression-to-functions": "^7.12.1", - "@babel/helper-optimise-call-expression": "^7.10.4", - "@babel/traverse": "^7.12.5", - "@babel/types": "^7.12.5" + "@babel/helper-member-expression-to-functions": "^7.14.5", + "@babel/helper-optimise-call-expression": "^7.14.5", + "@babel/traverse": "^7.14.5", + "@babel/types": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" } }, "node_modules/@babel/helper-simple-access": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.12.1.tgz", - "integrity": "sha512-OxBp7pMrjVewSSC8fXDFrHrBcJATOOFssZwv16F3/6Xtc138GHybBfPbm9kfiqQHKhYQrlamWILwlDCeyMFEaA==", + "version": "7.14.5", "dev": true, + "license": "MIT", "dependencies": { - "@babel/types": "^7.12.1" + "@babel/types": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" } }, "node_modules/@babel/helper-skip-transparent-expression-wrappers": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.12.1.tgz", - "integrity": "sha512-Mf5AUuhG1/OCChOJ/HcADmvcHM42WJockombn8ATJG3OnyiSxBK/Mm5x78BQWvmtXZKHgbjdGL2kin/HOLlZGA==", + "version": "7.14.5", "dev": true, + "license": "MIT", "dependencies": { - "@babel/types": "^7.12.1" + "@babel/types": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" } }, "node_modules/@babel/helper-split-export-declaration": { - "version": "7.11.0", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.11.0.tgz", - "integrity": "sha512-74Vejvp6mHkGE+m+k5vHY93FX2cAtrw1zXrZXRlG4l410Nm9PxfEiVTn1PjDPV5SnmieiueY4AFg2xqhNFuuZg==", + "version": "7.14.5", "dev": true, + "license": "MIT", "dependencies": { - "@babel/types": "^7.11.0" + "@babel/types": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-identifier": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz", - "integrity": "sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw==", - "dev": true + "version": "7.14.5", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } }, "node_modules/@babel/helper-validator-option": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.12.1.tgz", - "integrity": "sha512-YpJabsXlJVWP0USHjnC/AQDTLlZERbON577YUVO/wLpqyj6HAtVYnWaQaN0iUN+1/tWn3c+uKKXjRut5115Y2A==", - "dev": true + "version": "7.14.5", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } }, "node_modules/@babel/helper-wrap-function": { - "version": "7.12.3", - "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.12.3.tgz", - "integrity": "sha512-Cvb8IuJDln3rs6tzjW3Y8UeelAOdnpB8xtQ4sme2MSZ9wOxrbThporC0y/EtE16VAtoyEfLM404Xr1e0OOp+ow==", + "version": "7.14.5", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-function-name": "^7.10.4", - "@babel/template": "^7.10.4", - "@babel/traverse": "^7.10.4", - "@babel/types": "^7.10.4" + "@babel/helper-function-name": "^7.14.5", + "@babel/template": "^7.14.5", + "@babel/traverse": "^7.14.5", + "@babel/types": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-wrap-function/node_modules/@babel/template": { + "version": "7.14.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.14.5", + "@babel/parser": "^7.14.5", + "@babel/types": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" } }, "node_modules/@babel/helpers": { - "version": "7.12.5", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.12.5.tgz", - "integrity": "sha512-lgKGMQlKqA8meJqKsW6rUnc4MdUk35Ln0ATDqdM1a/UpARODdI4j5Y5lVfUScnSNkJcdCRAaWkspykNoFg9sJA==", + "version": "7.14.6", "dev": true, + "license": "MIT", "dependencies": { - "@babel/template": "^7.10.4", - "@babel/traverse": "^7.12.5", - "@babel/types": "^7.12.5" + "@babel/template": "^7.14.5", + "@babel/traverse": "^7.14.5", + "@babel/types": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers/node_modules/@babel/template": { + "version": "7.14.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.14.5", + "@babel/parser": "^7.14.5", + "@babel/types": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" } }, "node_modules/@babel/highlight": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.4.tgz", - "integrity": "sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA==", + "version": "7.14.5", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-validator-identifier": "^7.10.4", + "@babel/helper-validator-identifier": "^7.14.5", "chalk": "^2.0.0", "js-tokens": "^4.0.0" + }, + "engines": { + "node": ">=6.9.0" } }, "node_modules/@babel/parser": { - "version": "7.12.7", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.12.7.tgz", - "integrity": "sha512-oWR02Ubp4xTLCAqPRiNIuMVgNO5Aif/xpXtabhzW2HWUD47XJsAB4Zd/Rg30+XeQA3juXigV7hlquOTmwqLiwg==", + "version": "7.14.7", "dev": true, + "license": "MIT", "bin": { "parser": "bin/babel-parser.js" }, @@ -1359,172 +991,197 @@ } }, "node_modules/@babel/plugin-proposal-async-generator-functions": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.12.1.tgz", - "integrity": "sha512-d+/o30tJxFxrA1lhzJqiUcEJdI6jKlNregCv5bASeGf2Q4MXmnwH7viDo7nhx1/ohf09oaH8j1GVYG/e3Yqk6A==", + "version": "7.14.7", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/helper-remap-async-to-generator": "^7.12.1", - "@babel/plugin-syntax-async-generators": "^7.8.0" + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-remap-async-to-generator": "^7.14.5", + "@babel/plugin-syntax-async-generators": "^7.8.4" + }, + "engines": { + "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-proposal-class-properties": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.12.1.tgz", - "integrity": "sha512-cKp3dlQsFsEs5CWKnN7BnSHOd0EOW8EKpEjkoz1pO2E5KzIDNV9Ros1b0CnmbVgAGXJubOYVBOGCT1OmJwOI7w==", + "version": "7.14.5", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.12.1", - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-create-class-features-plugin": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-proposal-dynamic-import": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.12.1.tgz", - "integrity": "sha512-a4rhUSZFuq5W8/OO8H7BL5zspjnc1FLd9hlOxIK/f7qG4a0qsqk8uvF/ywgBA8/OmjsapjpvaEOYItfGG1qIvQ==", + "version": "7.14.5", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/plugin-syntax-dynamic-import": "^7.8.0" + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/plugin-syntax-dynamic-import": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-proposal-export-namespace-from": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.12.1.tgz", - "integrity": "sha512-6CThGf0irEkzujYS5LQcjBx8j/4aQGiVv7J9+2f7pGfxqyKh3WnmVJYW3hdrQjyksErMGBPQrCnHfOtna+WLbw==", + "version": "7.14.5", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4", + "@babel/helper-plugin-utils": "^7.14.5", "@babel/plugin-syntax-export-namespace-from": "^7.8.3" }, + "engines": { + "node": ">=6.9.0" + }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-proposal-json-strings": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.12.1.tgz", - "integrity": "sha512-GoLDUi6U9ZLzlSda2Df++VSqDJg3CG+dR0+iWsv6XRw1rEq+zwt4DirM9yrxW6XWaTpmai1cWJLMfM8qQJf+yw==", + "version": "7.14.5", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/plugin-syntax-json-strings": "^7.8.0" + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/plugin-syntax-json-strings": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-proposal-logical-assignment-operators": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.12.1.tgz", - "integrity": "sha512-k8ZmVv0JU+4gcUGeCDZOGd0lCIamU/sMtIiX3UWnUc5yzgq6YUGyEolNYD+MLYKfSzgECPcqetVcJP9Afe/aCA==", + "version": "7.14.5", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4", + "@babel/helper-plugin-utils": "^7.14.5", "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" }, + "engines": { + "node": ">=6.9.0" + }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-proposal-nullish-coalescing-operator": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.12.1.tgz", - "integrity": "sha512-nZY0ESiaQDI1y96+jk6VxMOaL4LPo/QDHBqL+SF3/vl6dHkTwHlOI8L4ZwuRBHgakRBw5zsVylel7QPbbGuYgg==", + "version": "7.14.5", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.0" + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-proposal-numeric-separator": { - "version": "7.12.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.12.7.tgz", - "integrity": "sha512-8c+uy0qmnRTeukiGsjLGy6uVs/TFjJchGXUeBqlG4VWYOdJWkhhVPdQ3uHwbmalfJwv2JsV0qffXP4asRfL2SQ==", + "version": "7.14.5", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4", + "@babel/helper-plugin-utils": "^7.14.5", "@babel/plugin-syntax-numeric-separator": "^7.10.4" }, + "engines": { + "node": ">=6.9.0" + }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-proposal-object-rest-spread": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.12.1.tgz", - "integrity": "sha512-s6SowJIjzlhx8o7lsFx5zmY4At6CTtDvgNQDdPzkBQucle58A6b/TTeEBYtyDgmcXjUTM+vE8YOGHZzzbc/ioA==", + "version": "7.14.7", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/plugin-syntax-object-rest-spread": "^7.8.0", - "@babel/plugin-transform-parameters": "^7.12.1" + "@babel/compat-data": "^7.14.7", + "@babel/helper-compilation-targets": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-transform-parameters": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-proposal-optional-catch-binding": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.12.1.tgz", - "integrity": "sha512-hFvIjgprh9mMw5v42sJWLI1lzU5L2sznP805zeT6rySVRA0Y18StRhDqhSxlap0oVgItRsB6WSROp4YnJTJz0g==", + "version": "7.14.5", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.0" + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-proposal-optional-chaining": { - "version": "7.12.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.12.7.tgz", - "integrity": "sha512-4ovylXZ0PWmwoOvhU2vhnzVNnm88/Sm9nx7V8BPgMvAzn5zDou3/Awy0EjglyubVHasJj+XCEkr/r1X3P5elCA==", + "version": "7.14.5", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/helper-skip-transparent-expression-wrappers": "^7.12.1", - "@babel/plugin-syntax-optional-chaining": "^7.8.0" + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.14.5", + "@babel/plugin-syntax-optional-chaining": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-proposal-private-methods": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.12.1.tgz", - "integrity": "sha512-mwZ1phvH7/NHK6Kf8LP7MYDogGV+DKB1mryFOEwx5EBNQrosvIczzZFTUmWaeujd5xT6G1ELYWUz3CutMhjE1w==", + "version": "7.14.5", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.12.1", - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-create-class-features-plugin": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-proposal-unicode-property-regex": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.12.1.tgz", - "integrity": "sha512-MYq+l+PvHuw/rKUz1at/vb6nCnQ2gmJBNaM62z0OgH7B2W1D9pvkpYtlti9bGtizNIU1K3zm4bZF9F91efVY0w==", + "version": "7.14.5", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.12.1", - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-create-regexp-features-plugin": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5" }, "engines": { "node": ">=4" @@ -1535,9 +1192,8 @@ }, "node_modules/@babel/plugin-syntax-async-generators": { "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==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, @@ -1546,12 +1202,11 @@ } }, "node_modules/@babel/plugin-syntax-class-properties": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.1.tgz", - "integrity": "sha512-U40A76x5gTwmESz+qiqssqmeEsKvcSyvtgktrm0uzcARAmM9I1jR221f6Oq+GmHrcD+LvZDag1UTOTe2fL3TeA==", + "version": "7.12.13", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-plugin-utils": "^7.12.13" }, "peerDependencies": { "@babel/core": "^7.0.0-0" @@ -1559,9 +1214,8 @@ }, "node_modules/@babel/plugin-syntax-dynamic-import": { "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==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, @@ -1571,9 +1225,8 @@ }, "node_modules/@babel/plugin-syntax-export-namespace-from": { "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz", - "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.8.3" }, @@ -1583,9 +1236,8 @@ }, "node_modules/@babel/plugin-syntax-json-strings": { "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==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, @@ -1595,9 +1247,8 @@ }, "node_modules/@babel/plugin-syntax-logical-assignment-operators": { "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", - "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.10.4" }, @@ -1607,9 +1258,8 @@ }, "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": { "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==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, @@ -1619,9 +1269,8 @@ }, "node_modules/@babel/plugin-syntax-numeric-separator": { "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==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.10.4" }, @@ -1631,9 +1280,8 @@ }, "node_modules/@babel/plugin-syntax-object-rest-spread": { "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==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, @@ -1643,9 +1291,8 @@ }, "node_modules/@babel/plugin-syntax-optional-catch-binding": { "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==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, @@ -1655,9 +1302,8 @@ }, "node_modules/@babel/plugin-syntax-optional-chaining": { "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==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, @@ -1666,24 +1312,28 @@ } }, "node_modules/@babel/plugin-syntax-top-level-await": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.12.1.tgz", - "integrity": "sha512-i7ooMZFS+a/Om0crxZodrTzNEPJHZrlMVGMTEpFAj6rYY/bKCddB0Dk/YxfPuYXOopuhKk/e1jV6h+WUU9XN3A==", + "version": "7.14.5", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-arrow-functions": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.12.1.tgz", - "integrity": "sha512-5QB50qyN44fzzz4/qxDPQMBCTHgxg3n0xRBLJUmBlLoU/sFvxVWGZF/ZUfMVDQuJUKXaBhbupxIzIfZ6Fwk/0A==", + "version": "7.14.5", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" @@ -1691,9 +1341,8 @@ }, "node_modules/@babel/plugin-transform-async-to-generator": { "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.12.1.tgz", - "integrity": "sha512-SDtqoEcarK1DFlRJ1hHRY5HvJUj5kX4qmtpMAm2QnhOlyuMC4TMdCRgW6WXpv93rZeYNeLP22y8Aq2dbcDRM1A==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-module-imports": "^7.12.1", "@babel/helper-plugin-utils": "^7.10.4", @@ -1704,311 +1353,354 @@ } }, "node_modules/@babel/plugin-transform-block-scoped-functions": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.12.1.tgz", - "integrity": "sha512-5OpxfuYnSgPalRpo8EWGPzIYf0lHBWORCkj5M0oLBwHdlux9Ri36QqGW3/LR13RSVOAoUUMzoPI/jpE4ABcHoA==", + "version": "7.14.5", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-block-scoping": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.12.1.tgz", - "integrity": "sha512-zJyAC9sZdE60r1nVQHblcfCj29Dh2Y0DOvlMkcqSo0ckqjiCwNiUezUKw+RjOCwGfpLRwnAeQ2XlLpsnGkvv9w==", + "version": "7.14.5", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-classes": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.12.1.tgz", - "integrity": "sha512-/74xkA7bVdzQTBeSUhLLJgYIcxw/dpEpCdRDiHgPJ3Mv6uC11UhjpOhl72CgqbBCmt1qtssCyB2xnJm1+PFjog==", + "version": "7.14.5", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-annotate-as-pure": "^7.10.4", - "@babel/helper-define-map": "^7.10.4", - "@babel/helper-function-name": "^7.10.4", - "@babel/helper-optimise-call-expression": "^7.10.4", - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/helper-replace-supers": "^7.12.1", - "@babel/helper-split-export-declaration": "^7.10.4", + "@babel/helper-annotate-as-pure": "^7.14.5", + "@babel/helper-function-name": "^7.14.5", + "@babel/helper-optimise-call-expression": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-replace-supers": "^7.14.5", + "@babel/helper-split-export-declaration": "^7.14.5", "globals": "^11.1.0" }, + "engines": { + "node": ">=6.9.0" + }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-computed-properties": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.12.1.tgz", - "integrity": "sha512-vVUOYpPWB7BkgUWPo4C44mUQHpTZXakEqFjbv8rQMg7TC6S6ZhGZ3otQcRH6u7+adSlE5i0sp63eMC/XGffrzg==", + "version": "7.14.5", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-destructuring": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.12.1.tgz", - "integrity": "sha512-fRMYFKuzi/rSiYb2uRLiUENJOKq4Gnl+6qOv5f8z0TZXg3llUwUhsNNwrwaT/6dUhJTzNpBr+CUvEWBtfNY1cw==", + "version": "7.14.7", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-dotall-regex": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.12.1.tgz", - "integrity": "sha512-B2pXeRKoLszfEW7J4Hg9LoFaWEbr/kzo3teWHmtFCszjRNa/b40f9mfeqZsIDLLt/FjwQ6pz/Gdlwy85xNckBA==", + "version": "7.14.5", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.12.1", - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-create-regexp-features-plugin": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-duplicate-keys": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.12.1.tgz", - "integrity": "sha512-iRght0T0HztAb/CazveUpUQrZY+aGKKaWXMJ4uf9YJtqxSUe09j3wteztCUDRHs+SRAL7yMuFqUsLoAKKzgXjw==", + "version": "7.14.5", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-exponentiation-operator": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.12.1.tgz", - "integrity": "sha512-7tqwy2bv48q+c1EHbXK0Zx3KXd2RVQp6OC7PbwFNt/dPTAV3Lu5sWtWuAj8owr5wqtWnqHfl2/mJlUmqkChKug==", + "version": "7.14.5", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-builder-binary-assignment-operator-visitor": "^7.10.4", - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-builder-binary-assignment-operator-visitor": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-for-of": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.12.1.tgz", - "integrity": "sha512-Zaeq10naAsuHo7heQvyV0ptj4dlZJwZgNAtBYBnu5nNKJoW62m0zKcIEyVECrUKErkUkg6ajMy4ZfnVZciSBhg==", + "version": "7.14.5", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-function-name": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.12.1.tgz", - "integrity": "sha512-JF3UgJUILoFrFMEnOJLJkRHSk6LUSXLmEFsA23aR2O5CSLUxbeUX1IZ1YQ7Sn0aXb601Ncwjx73a+FVqgcljVw==", + "version": "7.14.5", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-function-name": "^7.10.4", - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-function-name": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-literals": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.12.1.tgz", - "integrity": "sha512-+PxVGA+2Ag6uGgL0A5f+9rklOnnMccwEBzwYFL3EUaKuiyVnUipyXncFcfjSkbimLrODoqki1U9XxZzTvfN7IQ==", + "version": "7.14.5", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-member-expression-literals": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.12.1.tgz", - "integrity": "sha512-1sxePl6z9ad0gFMB9KqmYofk34flq62aqMt9NqliS/7hPEpURUCMbyHXrMPlo282iY7nAvUB1aQd5mg79UD9Jg==", + "version": "7.14.5", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-modules-amd": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.12.1.tgz", - "integrity": "sha512-tDW8hMkzad5oDtzsB70HIQQRBiTKrhfgwC/KkJeGsaNFTdWhKNt/BiE8c5yj19XiGyrxpbkOfH87qkNg1YGlOQ==", + "version": "7.14.5", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-module-transforms": "^7.12.1", - "@babel/helper-plugin-utils": "^7.10.4", + "@babel/helper-module-transforms": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5", "babel-plugin-dynamic-import-node": "^2.3.3" }, + "engines": { + "node": ">=6.9.0" + }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-modules-commonjs": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.12.1.tgz", - "integrity": "sha512-dY789wq6l0uLY8py9c1B48V8mVL5gZh/+PQ5ZPrylPYsnAvnEMjqsUXkuoDVPeVK+0VyGar+D08107LzDQ6pag==", + "version": "7.14.5", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-module-transforms": "^7.12.1", - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/helper-simple-access": "^7.12.1", + "@babel/helper-module-transforms": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-simple-access": "^7.14.5", "babel-plugin-dynamic-import-node": "^2.3.3" }, + "engines": { + "node": ">=6.9.0" + }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-modules-systemjs": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.12.1.tgz", - "integrity": "sha512-Hn7cVvOavVh8yvW6fLwveFqSnd7rbQN3zJvoPNyNaQSvgfKmDBO9U1YL9+PCXGRlZD9tNdWTy5ACKqMuzyn32Q==", + "version": "7.14.5", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-hoist-variables": "^7.10.4", - "@babel/helper-module-transforms": "^7.12.1", - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/helper-validator-identifier": "^7.10.4", + "@babel/helper-hoist-variables": "^7.14.5", + "@babel/helper-module-transforms": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-validator-identifier": "^7.14.5", "babel-plugin-dynamic-import-node": "^2.3.3" }, + "engines": { + "node": ">=6.9.0" + }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-modules-umd": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.12.1.tgz", - "integrity": "sha512-aEIubCS0KHKM0zUos5fIoQm+AZUMt1ZvMpqz0/H5qAQ7vWylr9+PLYurT+Ic7ID/bKLd4q8hDovaG3Zch2uz5Q==", + "version": "7.14.5", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-module-transforms": "^7.12.1", - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-module-transforms": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-named-capturing-groups-regex": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.12.1.tgz", - "integrity": "sha512-tB43uQ62RHcoDp9v2Nsf+dSM8sbNodbEicbQNA53zHz8pWUhsgHSJCGpt7daXxRydjb0KnfmB+ChXOv3oADp1Q==", + "version": "7.14.7", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.12.1" + "@babel/helper-create-regexp-features-plugin": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0" } }, "node_modules/@babel/plugin-transform-new-target": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.12.1.tgz", - "integrity": "sha512-+eW/VLcUL5L9IvJH7rT1sT0CzkdUTvPrXC2PXTn/7z7tXLBuKvezYbGdxD5WMRoyvyaujOq2fWoKl869heKjhw==", + "version": "7.14.5", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-object-super": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.12.1.tgz", - "integrity": "sha512-AvypiGJH9hsquNUn+RXVcBdeE3KHPZexWRdimhuV59cSoOt5kFBmqlByorAeUlGG2CJWd0U+4ZtNKga/TB0cAw==", + "version": "7.14.5", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/helper-replace-supers": "^7.12.1" + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-replace-supers": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-parameters": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.12.1.tgz", - "integrity": "sha512-xq9C5EQhdPK23ZeCdMxl8bbRnAgHFrw5EOC3KJUsSylZqdkCaFEXxGSBuTSObOpiiHHNyb82es8M1QYgfQGfNg==", + "version": "7.14.5", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-property-literals": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.12.1.tgz", - "integrity": "sha512-6MTCR/mZ1MQS+AwZLplX4cEySjCpnIF26ToWo942nqn8hXSm7McaHQNeGx/pt7suI1TWOWMfa/NgBhiqSnX0cQ==", + "version": "7.14.5", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-regenerator": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.12.1.tgz", - "integrity": "sha512-gYrHqs5itw6i4PflFX3OdBPMQdPbF4bj2REIUxlMRUFk0/ZOAIpDFuViuxPjUL7YC8UPnf+XG7/utJvqXdPKng==", + "version": "7.14.5", "dev": true, + "license": "MIT", "dependencies": { "regenerator-transform": "^0.14.2" }, + "engines": { + "node": ">=6.9.0" + }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-reserved-words": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.12.1.tgz", - "integrity": "sha512-pOnUfhyPKvZpVyBHhSBoX8vfA09b7r00Pmm1sH+29ae2hMTKVmSp4Ztsr8KBKjLjx17H0eJqaRC3bR2iThM54A==", + "version": "7.14.5", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-runtime": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.12.1.tgz", - "integrity": "sha512-Ac/H6G9FEIkS2tXsZjL4RAdS3L3WHxci0usAnz7laPWUmFiGtj7tIASChqKZMHTSQTQY6xDbOq+V1/vIq3QrWg==", + "version": "7.12.10", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-module-imports": "^7.12.1", + "@babel/helper-module-imports": "^7.12.5", "@babel/helper-plugin-utils": "^7.10.4", - "resolve": "^1.8.1", "semver": "^5.5.1" }, "peerDependencies": { @@ -2017,110 +1709,122 @@ }, "node_modules/@babel/plugin-transform-runtime/node_modules/semver": { "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", "dev": true, + "license": "ISC", "bin": { "semver": "bin/semver" } }, "node_modules/@babel/plugin-transform-shorthand-properties": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.12.1.tgz", - "integrity": "sha512-GFZS3c/MhX1OusqB1MZ1ct2xRzX5ppQh2JU1h2Pnfk88HtFTM+TWQqJNfwkmxtPQtb/s1tk87oENfXJlx7rSDw==", + "version": "7.14.5", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-spread": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.12.1.tgz", - "integrity": "sha512-vuLp8CP0BE18zVYjsEBZ5xoCecMK6LBMMxYzJnh01rxQRvhNhH1csMMmBfNo5tGpGO+NhdSNW2mzIvBu3K1fng==", + "version": "7.14.6", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/helper-skip-transparent-expression-wrappers": "^7.12.1" + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-sticky-regex": { - "version": "7.12.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.12.7.tgz", - "integrity": "sha512-VEiqZL5N/QvDbdjfYQBhruN0HYjSPjC4XkeqW4ny/jNtH9gcbgaqBIXYEZCNnESMAGs0/K/R7oFGMhOyu/eIxg==", + "version": "7.14.5", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-template-literals": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.12.1.tgz", - "integrity": "sha512-b4Zx3KHi+taXB1dVRBhVJtEPi9h1THCeKmae2qP0YdUHIFhVjtpqqNfxeVAa1xeHVhAy4SbHxEwx5cltAu5apw==", + "version": "7.14.5", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-typeof-symbol": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.12.1.tgz", - "integrity": "sha512-EPGgpGy+O5Kg5pJFNDKuxt9RdmTgj5sgrus2XVeMp/ZIbOESadgILUbm50SNpghOh3/6yrbsH+NB5+WJTmsA7Q==", + "version": "7.14.5", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-unicode-escapes": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.12.1.tgz", - "integrity": "sha512-I8gNHJLIc7GdApm7wkVnStWssPNbSRMPtgHdmH3sRM1zopz09UWPS4x5V4n1yz/MIWTVnJ9sp6IkuXdWM4w+2Q==", + "version": "7.14.5", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-unicode-regex": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.12.1.tgz", - "integrity": "sha512-SqH4ClNngh/zGwHZOOQMTD+e8FGWexILV+ePMyiDJttAWRh5dhDL8rcl5lSgU3Huiq6Zn6pWTMvdPAb21Dwdyg==", + "version": "7.14.5", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.12.1", - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-create-regexp-features-plugin": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/preset-env": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.12.1.tgz", - "integrity": "sha512-H8kxXmtPaAGT7TyBvSSkoSTUK6RHh61So05SyEbpmr0MCZrsNYn7mGMzzeYoOUCdHzww61k8XBft2TaES+xPLg==", + "version": "7.12.11", "dev": true, + "license": "MIT", "dependencies": { - "@babel/compat-data": "^7.12.1", - "@babel/helper-compilation-targets": "^7.12.1", - "@babel/helper-module-imports": "^7.12.1", + "@babel/compat-data": "^7.12.7", + "@babel/helper-compilation-targets": "^7.12.5", + "@babel/helper-module-imports": "^7.12.5", "@babel/helper-plugin-utils": "^7.10.4", - "@babel/helper-validator-option": "^7.12.1", + "@babel/helper-validator-option": "^7.12.11", "@babel/plugin-proposal-async-generator-functions": "^7.12.1", "@babel/plugin-proposal-class-properties": "^7.12.1", "@babel/plugin-proposal-dynamic-import": "^7.12.1", @@ -2128,10 +1832,10 @@ "@babel/plugin-proposal-json-strings": "^7.12.1", "@babel/plugin-proposal-logical-assignment-operators": "^7.12.1", "@babel/plugin-proposal-nullish-coalescing-operator": "^7.12.1", - "@babel/plugin-proposal-numeric-separator": "^7.12.1", + "@babel/plugin-proposal-numeric-separator": "^7.12.7", "@babel/plugin-proposal-object-rest-spread": "^7.12.1", "@babel/plugin-proposal-optional-catch-binding": "^7.12.1", - "@babel/plugin-proposal-optional-chaining": "^7.12.1", + "@babel/plugin-proposal-optional-chaining": "^7.12.7", "@babel/plugin-proposal-private-methods": "^7.12.1", "@babel/plugin-proposal-unicode-property-regex": "^7.12.1", "@babel/plugin-syntax-async-generators": "^7.8.0", @@ -2149,7 +1853,7 @@ "@babel/plugin-transform-arrow-functions": "^7.12.1", "@babel/plugin-transform-async-to-generator": "^7.12.1", "@babel/plugin-transform-block-scoped-functions": "^7.12.1", - "@babel/plugin-transform-block-scoping": "^7.12.1", + "@babel/plugin-transform-block-scoping": "^7.12.11", "@babel/plugin-transform-classes": "^7.12.1", "@babel/plugin-transform-computed-properties": "^7.12.1", "@babel/plugin-transform-destructuring": "^7.12.1", @@ -2173,14 +1877,14 @@ "@babel/plugin-transform-reserved-words": "^7.12.1", "@babel/plugin-transform-shorthand-properties": "^7.12.1", "@babel/plugin-transform-spread": "^7.12.1", - "@babel/plugin-transform-sticky-regex": "^7.12.1", + "@babel/plugin-transform-sticky-regex": "^7.12.7", "@babel/plugin-transform-template-literals": "^7.12.1", - "@babel/plugin-transform-typeof-symbol": "^7.12.1", + "@babel/plugin-transform-typeof-symbol": "^7.12.10", "@babel/plugin-transform-unicode-escapes": "^7.12.1", "@babel/plugin-transform-unicode-regex": "^7.12.1", "@babel/preset-modules": "^0.1.3", - "@babel/types": "^7.12.1", - "core-js-compat": "^3.6.2", + "@babel/types": "^7.12.11", + "core-js-compat": "^3.8.0", "semver": "^5.5.0" }, "peerDependencies": { @@ -2189,18 +1893,16 @@ }, "node_modules/@babel/preset-env/node_modules/semver": { "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", "dev": true, + "license": "ISC", "bin": { "semver": "bin/semver" } }, "node_modules/@babel/preset-modules": { "version": "0.1.4", - "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.4.tgz", - "integrity": "sha512-J36NhwnfdzpmH41M1DrnkkgAqhZaqr/NBdPfQ677mLzlaXo+oDiv1deyCDtgAhz8p328otdob0Du7+xgHGZbKg==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.0.0", "@babel/plugin-proposal-unicode-property-regex": "^7.4.4", @@ -2213,79 +1915,88 @@ } }, "node_modules/@babel/runtime": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.12.1.tgz", - "integrity": "sha512-J5AIf3vPj3UwXaAzb5j1xM4WAQDX3EMgemF8rjCP3SoW09LfRKAXQKt6CoVYl230P6iWdRcBbnLDDdnqWxZSCA==", + "version": "7.12.5", "dev": true, + "license": "MIT", "dependencies": { "regenerator-runtime": "^0.13.4" } }, "node_modules/@babel/template": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.10.4.tgz", - "integrity": "sha512-ZCjD27cGJFUB6nmCB1Enki3r+L5kJveX9pq1SvAUKoICy6CZ9yD8xO086YXdYhvNjBdnekm4ZnaP5yC8Cs/1tA==", + "version": "7.12.7", "dev": true, + "license": "MIT", "dependencies": { "@babel/code-frame": "^7.10.4", - "@babel/parser": "^7.10.4", - "@babel/types": "^7.10.4" + "@babel/parser": "^7.12.7", + "@babel/types": "^7.12.7" } }, "node_modules/@babel/traverse": { - "version": "7.12.9", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.12.9.tgz", - "integrity": "sha512-iX9ajqnLdoU1s1nHt36JDI9KG4k+vmI8WgjK5d+aDTwQbL2fUnzedNedssA645Ede3PM2ma1n8Q4h2ohwXgMXw==", + "version": "7.14.7", "dev": true, + "license": "MIT", "dependencies": { - "@babel/code-frame": "^7.10.4", - "@babel/generator": "^7.12.5", - "@babel/helper-function-name": "^7.10.4", - "@babel/helper-split-export-declaration": "^7.11.0", - "@babel/parser": "^7.12.7", - "@babel/types": "^7.12.7", + "@babel/code-frame": "^7.14.5", + "@babel/generator": "^7.14.5", + "@babel/helper-function-name": "^7.14.5", + "@babel/helper-hoist-variables": "^7.14.5", + "@babel/helper-split-export-declaration": "^7.14.5", + "@babel/parser": "^7.14.7", + "@babel/types": "^7.14.5", "debug": "^4.1.0", - "globals": "^11.1.0", - "lodash": "^4.17.19" + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" } }, "node_modules/@babel/traverse/node_modules/@babel/generator": { - "version": "7.12.5", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.12.5.tgz", - "integrity": "sha512-m16TQQJ8hPt7E+OS/XVQg/7U184MLXtvuGbCdA7na61vha+ImkyyNM/9DDA0unYCVZn3ZOhng+qz48/KBOT96A==", + "version": "7.14.5", "dev": true, + "license": "MIT", "dependencies": { - "@babel/types": "^7.12.5", + "@babel/types": "^7.14.5", "jsesc": "^2.5.1", "source-map": "^0.5.0" + }, + "engines": { + "node": ">=6.9.0" } }, "node_modules/@babel/traverse/node_modules/source-map": { "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", "dev": true, + "license": "BSD-3-Clause", "engines": { "node": ">=0.10.0" } }, "node_modules/@babel/types": { - "version": "7.12.7", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.12.7.tgz", - "integrity": "sha512-MNyI92qZq6jrQkXvtIiykvl4WtoRrVV9MPn+ZfsoEENjiWcBQ3ZSHrkxnJWgWtLX3XXqX5hrSQ+X69wkmesXuQ==", + "version": "7.14.5", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-validator-identifier": "^7.10.4", - "lodash": "^4.17.19", + "@babel/helper-validator-identifier": "^7.14.5", "to-fast-properties": "^2.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@discoveryjs/json-ext": { + "version": "0.5.2", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10.0.0" } }, "node_modules/@ionic/angular": { - "version": "5.5.1", - "resolved": "https://registry.npmjs.org/@ionic/angular/-/angular-5.5.1.tgz", - "integrity": "sha512-54aGiuZSnKcxN3gdsQN4LMdW96X/0crdnIUlAJt4DhdsrwjzHNEjCaXUTstAcpB1Rxbz5/uWbzpDcd174izkxQ==", + "version": "5.6.11", + "license": "MIT", "dependencies": { - "@ionic/core": "5.5.1", + "@ionic/core": "5.6.11", "tslib": "^1.9.3" }, "peerDependencies": { @@ -2297,12 +2008,10 @@ } }, "node_modules/@ionic/angular-toolkit": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@ionic/angular-toolkit/-/angular-toolkit-3.0.0.tgz", - "integrity": "sha512-H6SX8k+uPTdcsZAHEOaH5oIuQWSeIqEqEjjPqiD0e5+wmqc94RANNC/cRX/3cnVsWQiqcUY75CbpGec4xRvWoA==", + "version": "3.1.1", "dev": true, "dependencies": { - "@schematics/angular": "^11.0.0", + "@schematics/angular": "^11.2.4", "cheerio": "1.0.0-rc.3", "colorette": "1.1.0", "copy-webpack-plugin": "^6.2.1", @@ -2311,49 +2020,20 @@ "ws": "^7.0.1" }, "peerDependencies": { - "@angular-devkit/architect": "^0.1100.0", - "@angular-devkit/build-angular": "^0.1100.0", - "@angular-devkit/core": "^11.0.0", - "@angular-devkit/schematics": "^11.0.0" - } - }, - "node_modules/@ionic/angular-toolkit/node_modules/colorette": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.1.0.tgz", - "integrity": "sha512-6S062WDQUXi6hOfkO/sBPVwE5ASXY4G2+b4atvhJfSsuUUhIaUKlkjLe9692Ipyt5/a+IPF5aVTu3V5gvXq5cg==", - "dev": true - }, - "node_modules/@ionic/angular-toolkit/node_modules/ws": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.1.tgz", - "integrity": "sha512-pTsP8UAfhy3sk1lSk/O/s4tjD0CRwvMnzvwr4OKGX7ZvqZtUyx4KIJB5JWbkykPoc55tixMGgTNoh3k4FkNGFQ==", - "dev": true, - "engines": { - "node": ">=8.3.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": "^5.0.2" - }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } + "@angular-devkit/architect": "^0.1102.4", + "@angular-devkit/build-angular": "^0.1102.4", + "@angular-devkit/core": "^11.2.4", + "@angular-devkit/schematics": "^11.2.4" } }, "node_modules/@ionic/angular/node_modules/tslib": { "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + "license": "0BSD" }, "node_modules/@ionic/cli-framework": { - "version": "5.0.6", - "resolved": "https://registry.npmjs.org/@ionic/cli-framework/-/cli-framework-5.0.6.tgz", - "integrity": "sha512-CygkCCn+O3vMmt+l5y+evmcBHBI/HVr+QWQVca84ooM2lrLzIQDRC+iZ5RKOnF+eCcywGZ6a68FvXoWAvQzfmw==", + "version": "5.1.0", "dev": true, + "license": "MIT", "dependencies": { "@ionic/cli-framework-output": "2.2.2", "@ionic/utils-array": "2.1.5", @@ -2377,9 +2057,8 @@ }, "node_modules/@ionic/cli-framework-output": { "version": "2.2.2", - "resolved": "https://registry.npmjs.org/@ionic/cli-framework-output/-/cli-framework-output-2.2.2.tgz", - "integrity": "sha512-eQYkqIW1/tCwSC6Bd0gjse96U11lDX/ikf3jvsjX7a8z/zwSmGzCHRizb7xogV65Ey+1/zyAZR71cpDRQuFLBQ==", "dev": true, + "license": "MIT", "dependencies": { "@ionic/utils-terminal": "2.3.1", "debug": "^4.0.0", @@ -2391,9 +2070,8 @@ }, "node_modules/@ionic/cli-framework/node_modules/ansi-styles": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, + "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, @@ -2405,10 +2083,9 @@ } }, "node_modules/@ionic/cli-framework/node_modules/chalk": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", - "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", + "version": "4.1.1", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -2422,9 +2099,8 @@ }, "node_modules/@ionic/cli-framework/node_modules/color-convert": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, + "license": "MIT", "dependencies": { "color-name": "~1.1.4" }, @@ -2434,24 +2110,21 @@ }, "node_modules/@ionic/cli-framework/node_modules/color-name": { "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@ionic/cli-framework/node_modules/has-flag": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/@ionic/cli-framework/node_modules/supports-color": { "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, + "license": "MIT", "dependencies": { "has-flag": "^4.0.0" }, @@ -2460,26 +2133,20 @@ } }, "node_modules/@ionic/core": { - "version": "5.5.1", - "resolved": "https://registry.npmjs.org/@ionic/core/-/core-5.5.1.tgz", - "integrity": "sha512-ytsweRqFeupuVzMJydjh0w0RMjlI+GkHwXQ5SwVuto+cRxA9aKPkcxELzOWYRto3E00jbXFBThGhoL+jNUsK7g==", + "version": "5.6.11", + "license": "MIT", "dependencies": { - "ionicons": "^5.1.2", - "tslib": "^1.10.0" + "@stencil/core": "^2.4.0", + "ionicons": "^5.5.1", + "tslib": "^2.1.0" } }, - "node_modules/@ionic/core/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" - }, "node_modules/@ionic/lab": { - "version": "3.2.9", - "resolved": "https://registry.npmjs.org/@ionic/lab/-/lab-3.2.9.tgz", - "integrity": "sha512-+0fzd3SZ+4dZOaVHNAbhN/2R5pDqJnQLitVgkAFp4gMpyjkIW3enBMpXBLnOaqGhUABUF1Qve7qT+ySQBP8yTA==", + "version": "3.2.10", "dev": true, + "license": "MIT", "dependencies": { - "@ionic/cli-framework": "5.0.6", + "@ionic/cli-framework": "5.1.0", "@ionic/utils-fs": "3.1.5", "chalk": "^4.0.0", "express": "^4.16.2", @@ -2494,9 +2161,8 @@ }, "node_modules/@ionic/lab/node_modules/ansi-styles": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, + "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, @@ -2508,10 +2174,9 @@ } }, "node_modules/@ionic/lab/node_modules/chalk": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", - "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", + "version": "4.1.1", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -2525,9 +2190,8 @@ }, "node_modules/@ionic/lab/node_modules/color-convert": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, + "license": "MIT", "dependencies": { "color-name": "~1.1.4" }, @@ -2537,24 +2201,21 @@ }, "node_modules/@ionic/lab/node_modules/color-name": { "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@ionic/lab/node_modules/has-flag": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/@ionic/lab/node_modules/supports-color": { "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, + "license": "MIT", "dependencies": { "has-flag": "^4.0.0" }, @@ -2563,29 +2224,32 @@ } }, "node_modules/@ionic/storage": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@ionic/storage/-/storage-2.2.0.tgz", - "integrity": "sha512-2pszrzmI+fAar2Rx0WmJDVpc15D1k5tvLkB49NLYWJ2pOMaO/3/vp7mg/mEbg3rdsPE9FRbYI6vdKjQ2pP1EWA==", + "version": "3.0.6", + "license": "MIT", "dependencies": { - "localforage": "1.7.1", - "localforage-cordovasqlitedriver": "1.7.0", - "tslib": "^1.7.1" + "localforage": "^1.9.0" + } + }, + "node_modules/@ionic/storage-angular": { + "version": "3.0.6", + "license": "MIT", + "dependencies": { + "@ionic/storage": "^3.0.4", + "tslib": "^1.10.0" }, "peerDependencies": { "@angular/core": "*", "rxjs": "*" } }, - "node_modules/@ionic/storage/node_modules/tslib": { + "node_modules/@ionic/storage-angular/node_modules/tslib": { "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + "license": "0BSD" }, "node_modules/@ionic/utils-array": { "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@ionic/utils-array/-/utils-array-2.1.5.tgz", - "integrity": "sha512-HD72a71IQVBmQckDwmA8RxNVMTbxnaLbgFOl+dO5tbvW9CkkSFCv41h6fUuNsSEVgngfkn0i98HDuZC8mk+lTA==", "dev": true, + "license": "MIT", "dependencies": { "debug": "^4.0.0", "tslib": "^2.0.1" @@ -2596,9 +2260,8 @@ }, "node_modules/@ionic/utils-fs": { "version": "3.1.5", - "resolved": "https://registry.npmjs.org/@ionic/utils-fs/-/utils-fs-3.1.5.tgz", - "integrity": "sha512-a41bY2dHqWSEQQ/80CpbXSs8McyiCFf2DnIWWLukrhYWf46h4qi6M/8dxcMKrofRiqI/3F+cL3S2mOm9Zz/o2Q==", "dev": true, + "license": "MIT", "dependencies": { "debug": "^4.0.0", "fs-extra": "^9.0.0", @@ -2609,15 +2272,14 @@ } }, "node_modules/@ionic/utils-fs/node_modules/fs-extra": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.0.1.tgz", - "integrity": "sha512-h2iAoN838FqAFJY2/qVpzFXy+EBxfVE220PalAqQLDVsFOHLJrZvut5puAbCdNv6WJk+B8ihI+k0c7JK5erwqQ==", + "version": "9.1.0", "dev": true, + "license": "MIT", "dependencies": { "at-least-node": "^1.0.0", "graceful-fs": "^4.2.0", "jsonfile": "^6.0.1", - "universalify": "^1.0.0" + "universalify": "^2.0.0" }, "engines": { "node": ">=10" @@ -2625,9 +2287,8 @@ }, "node_modules/@ionic/utils-fs/node_modules/jsonfile": { "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", "dev": true, + "license": "MIT", "dependencies": { "universalify": "^2.0.0" }, @@ -2635,29 +2296,18 @@ "graceful-fs": "^4.1.6" } }, - "node_modules/@ionic/utils-fs/node_modules/jsonfile/node_modules/universalify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", - "dev": true, - "engines": { - "node": ">= 10.0.0" - } - }, "node_modules/@ionic/utils-fs/node_modules/universalify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-1.0.0.tgz", - "integrity": "sha512-rb6X1W158d7pRQBg5gkR8uPaSfiids68LTJQYOtEUhoJUWBdaQHsuT/EUduxXYxcrt4r5PJ4fuHW1MHT6p0qug==", + "version": "2.0.0", "dev": true, + "license": "MIT", "engines": { "node": ">= 10.0.0" } }, "node_modules/@ionic/utils-object": { "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@ionic/utils-object/-/utils-object-2.1.5.tgz", - "integrity": "sha512-XnYNSwfewUqxq+yjER1hxTKggftpNjFLJH0s37jcrNDwbzmbpFTQTVAp4ikNK4rd9DOebX/jbeZb8jfD86IYxw==", "dev": true, + "license": "MIT", "dependencies": { "debug": "^4.0.0", "tslib": "^2.0.1" @@ -2668,9 +2318,8 @@ }, "node_modules/@ionic/utils-process": { "version": "2.1.8", - "resolved": "https://registry.npmjs.org/@ionic/utils-process/-/utils-process-2.1.8.tgz", - "integrity": "sha512-VBBoyTzi+m6tgKAItl+jiTQneGwTOsctcrTG4CsEgmVOVOEhUYkPhddXqzD+oC54hPDU9ROsd3I014P5CWEuhQ==", "dev": true, + "license": "MIT", "dependencies": { "@ionic/utils-object": "2.1.5", "@ionic/utils-terminal": "2.3.1", @@ -2685,9 +2334,8 @@ }, "node_modules/@ionic/utils-stream": { "version": "3.1.5", - "resolved": "https://registry.npmjs.org/@ionic/utils-stream/-/utils-stream-3.1.5.tgz", - "integrity": "sha512-hkm46uHvEC05X/8PHgdJi4l4zv9VQDELZTM+Kz69odtO9zZYfnt8DkfXHJqJ+PxmtiE5mk/ehJWLnn/XAczTUw==", "dev": true, + "license": "MIT", "dependencies": { "debug": "^4.0.0", "tslib": "^2.0.1" @@ -2698,9 +2346,8 @@ }, "node_modules/@ionic/utils-subprocess": { "version": "2.1.8", - "resolved": "https://registry.npmjs.org/@ionic/utils-subprocess/-/utils-subprocess-2.1.8.tgz", - "integrity": "sha512-pkmtf1LtXcEMPn6/cctREL2aZtZoy0+0Sl+nT0NIkOHIoBUcqrcfMWdctCSM4Mp6+2/hLWtgpHE3TOIibkWfIg==", "dev": true, + "license": "MIT", "dependencies": { "@ionic/utils-array": "2.1.5", "@ionic/utils-fs": "3.1.5", @@ -2715,70 +2362,10 @@ "node": ">=10.3.0" } }, - "node_modules/@ionic/utils-subprocess/node_modules/cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "dev": true, - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@ionic/utils-subprocess/node_modules/path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/@ionic/utils-subprocess/node_modules/shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, - "dependencies": { - "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@ionic/utils-subprocess/node_modules/shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/@ionic/utils-subprocess/node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, "node_modules/@ionic/utils-terminal": { "version": "2.3.1", - "resolved": "https://registry.npmjs.org/@ionic/utils-terminal/-/utils-terminal-2.3.1.tgz", - "integrity": "sha512-cglsSd2AckI3Ldtdfczeq64vIIDjtPspV5QJtky8f8uIdxkeOIGeRV7bCj1+BEf1hyo+ZuggQxLviHnbMZhiRw==", "dev": true, + "license": "MIT", "dependencies": { "debug": "^4.0.0", "signal-exit": "^3.0.3", @@ -2793,120 +2380,18 @@ "node": ">=10.3.0" } }, - "node_modules/@ionic/utils-terminal/node_modules/ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/@ionic/utils-terminal/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/@ionic/utils-terminal/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/@ionic/utils-terminal/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/@ionic/utils-terminal/node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true - }, - "node_modules/@ionic/utils-terminal/node_modules/is-fullwidth-code-point": { - "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==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/@ionic/utils-terminal/node_modules/string-width": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", - "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", - "dev": true, - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@ionic/utils-terminal/node_modules/strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", - "dev": true, - "dependencies": { - "ansi-regex": "^5.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@ionic/utils-terminal/node_modules/wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, "node_modules/@istanbuljs/schema": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.2.tgz", - "integrity": "sha512-tsAQNx32a8CoFhjhijUIhI4kccIAgmGhy8LZMZgGfmXcpMbPRUqn5LWmgRttILi6yeGmBJd2xsPkFMs0PzgPCw==", + "version": "0.1.3", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/@jsdevtools/coverage-istanbul-loader": { "version": "3.0.5", - "resolved": "https://registry.npmjs.org/@jsdevtools/coverage-istanbul-loader/-/coverage-istanbul-loader-3.0.5.tgz", - "integrity": "sha512-EUCPEkaRPvmHjWAAZkWMT7JDzpw7FKB00WTISaiXsbNOd5hCHg77XLA8sLYLFDo1zepYLo2w7GstN8YBqRXZfA==", "dev": true, + "license": "MIT", "dependencies": { "convert-source-map": "^1.7.0", "istanbul-lib-instrument": "^4.0.3", @@ -2915,83 +2400,45 @@ "schema-utils": "^2.7.0" } }, - "node_modules/@ngtools/webpack": { - "version": "11.0.3", - "resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-11.0.3.tgz", - "integrity": "sha512-TbWharROiFA88HOLvchtSwJfnFJEgn8HcdXRDX7EL2efDYC8UVZfXms58MCEQUk66ZjikNeIHPQml5rStSqPKQ==", - "dev": true, + "node_modules/@ngrx/component": { + "version": "11.1.1", + "resolved": "https://registry.npmjs.org/@ngrx/component/-/component-11.1.1.tgz", + "integrity": "sha512-Vw2jyz5O8g61OcDtX8FcJh+EV9VDJsk/q61WQyOuwr0yi3SbRnn/77bHzF27RVwiQn8lq3yteNnh32H/vRdFWQ==", "dependencies": { - "@angular-devkit/core": "11.0.3", - "enhanced-resolve": "5.3.1", - "webpack-sources": "2.0.1" + "tslib": "^2.0.0" + }, + "peerDependencies": { + "@angular/common": "^11.0.0", + "@angular/core": "^11.0.0", + "rxjs": "^6.5.3" + } + }, + "node_modules/@ngtools/webpack": { + "version": "11.2.14", + "dev": true, + "license": "MIT", + "dependencies": { + "@angular-devkit/core": "11.2.14", + "enhanced-resolve": "5.7.0", + "webpack-sources": "2.2.0" }, "engines": { "node": ">= 10.13.0", - "npm": ">= 6.11.0", + "npm": "^6.11.0 || ^7.5.6", "yarn": ">= 1.13.0" }, "peerDependencies": { - "@angular/compiler-cli": "^11.0.0", - "typescript": "~4.0.0", + "@angular/compiler-cli": "^11.0.0 || ^11.2.0-next", + "typescript": "~4.0.0 || ~4.1.0", "webpack": "^4.0.0" } }, - "node_modules/@ngtools/webpack/node_modules/@angular-devkit/core": { - "version": "11.0.3", - "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-11.0.3.tgz", - "integrity": "sha512-gJRiBj0gWDR2VtIvLvwwc/GM2MZvg1xw69ZbBJ1VuUgDqPBHdC8q3UMW3B82wdhxK+RBYa7ZOJxtIVggaHkm9g==", - "dev": true, - "dependencies": { - "ajv": "6.12.6", - "fast-json-stable-stringify": "2.1.0", - "magic-string": "0.25.7", - "rxjs": "6.6.3", - "source-map": "0.7.3" - }, - "engines": { - "node": ">= 10.13.0", - "npm": ">= 6.11.0", - "yarn": ">= 1.13.0" - } - }, - "node_modules/@ngtools/webpack/node_modules/source-map": { - "version": "0.7.3", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", - "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", - "dev": true, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@ngtools/webpack/node_modules/webpack-sources": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-2.0.1.tgz", - "integrity": "sha512-A9oYz7ANQBK5EN19rUXbvNgfdfZf5U2gP0769OXsj9CvYkCR6OHOsd6OKyEy4H38GGxpsQPKIL83NC64QY6Xmw==", - "dev": true, - "dependencies": { - "source-list-map": "^2.0.1", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/@ngtools/webpack/node_modules/webpack-sources/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/@nodelib/fs.scandir": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.3.tgz", - "integrity": "sha512-eGmwYQn3gxo4r7jdQnkrrN6bY478C3P+a/y72IJukF8LjB6ZHeB3c+Ehacj3sYeSmUXGlnA67/PmbM9CVwL7Dw==", + "version": "2.1.5", "dev": true, + "license": "MIT", "dependencies": { - "@nodelib/fs.stat": "2.0.3", + "@nodelib/fs.stat": "2.0.5", "run-parallel": "^1.1.9" }, "engines": { @@ -2999,21 +2446,19 @@ } }, "node_modules/@nodelib/fs.stat": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.3.tgz", - "integrity": "sha512-bQBFruR2TAwoevBEd/NWMoAAtNGzTRgdrqnYCc7dhzfoNvqPzLyqlEQnzZ3kVnNrSp25iyxE00/3h2fqGAGArA==", + "version": "2.0.5", "dev": true, + "license": "MIT", "engines": { "node": ">= 8" } }, "node_modules/@nodelib/fs.walk": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.4.tgz", - "integrity": "sha512-1V9XOY4rDW0rehzbrcqAmHnz8e7SKvX27gh8Gt2WgB0+pdzdiLV83p72kZPU+jvMbS1qU5mauP2iOvO8rhmurQ==", + "version": "1.2.8", "dev": true, + "license": "MIT", "dependencies": { - "@nodelib/fs.scandir": "2.1.3", + "@nodelib/fs.scandir": "2.1.5", "fastq": "^1.6.0" }, "engines": { @@ -3022,50 +2467,68 @@ }, "node_modules/@npmcli/ci-detect": { "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@npmcli/ci-detect/-/ci-detect-1.3.0.tgz", - "integrity": "sha512-oN3y7FAROHhrAt7Rr7PnTSwrHrZVRTS2ZbyxeQwSSYD0ifwM3YNgQqbaRmjcWoPyq77MjchusjJDspbzMmip1Q==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/@npmcli/git": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/@npmcli/git/-/git-2.0.6.tgz", - "integrity": "sha512-a1MnTfeRPBaKbFY07fd+6HugY1WAkKJzdiJvlRub/9o5xz2F/JtPacZZapx5zRJUQFIzSL677vmTSxEcDMrDbg==", + "version": "2.1.0", "dev": true, + "license": "ISC", "dependencies": { - "@npmcli/promise-spawn": "^1.1.0", + "@npmcli/promise-spawn": "^1.3.2", "lru-cache": "^6.0.0", - "mkdirp": "^1.0.3", - "npm-pick-manifest": "^6.0.0", + "mkdirp": "^1.0.4", + "npm-pick-manifest": "^6.1.1", "promise-inflight": "^1.0.1", "promise-retry": "^2.0.1", - "semver": "^7.3.2", - "unique-filename": "^1.1.1", + "semver": "^7.3.5", "which": "^2.0.2" } }, "node_modules/@npmcli/git/node_modules/err-code": { "version": "2.0.3", - "resolved": "https://registry.npmjs.org/err-code/-/err-code-2.0.3.tgz", - "integrity": "sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==", - "dev": true - }, - "node_modules/@npmcli/git/node_modules/mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", "dev": true, - "bin": { - "mkdirp": "bin/cmd.js" + "license": "MIT" + }, + "node_modules/@npmcli/git/node_modules/hosted-git-info": { + "version": "4.0.2", + "dev": true, + "license": "ISC", + "dependencies": { + "lru-cache": "^6.0.0" }, "engines": { "node": ">=10" } }, + "node_modules/@npmcli/git/node_modules/npm-package-arg": { + "version": "8.1.5", + "dev": true, + "license": "ISC", + "dependencies": { + "hosted-git-info": "^4.0.1", + "semver": "^7.3.4", + "validate-npm-package-name": "^3.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@npmcli/git/node_modules/npm-pick-manifest": { + "version": "6.1.1", + "dev": true, + "license": "ISC", + "dependencies": { + "npm-install-checks": "^4.0.0", + "npm-normalize-package-bin": "^1.0.1", + "npm-package-arg": "^8.1.2", + "semver": "^7.3.4" + } + }, "node_modules/@npmcli/git/node_modules/promise-retry": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/promise-retry/-/promise-retry-2.0.1.tgz", - "integrity": "sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==", "dev": true, + "license": "MIT", "dependencies": { "err-code": "^2.0.2", "retry": "^0.12.0" @@ -3074,26 +2537,32 @@ "node": ">=10" } }, - "node_modules/@npmcli/git/node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "node_modules/@npmcli/git/node_modules/retry": { + "version": "0.12.0", "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/@npmcli/git/node_modules/semver": { + "version": "7.3.5", + "dev": true, + "license": "ISC", "dependencies": { - "isexe": "^2.0.0" + "lru-cache": "^6.0.0" }, "bin": { - "node-which": "bin/node-which" + "semver": "bin/semver.js" }, "engines": { - "node": ">= 8" + "node": ">=10" } }, "node_modules/@npmcli/installed-package-contents": { "version": "1.0.7", - "resolved": "https://registry.npmjs.org/@npmcli/installed-package-contents/-/installed-package-contents-1.0.7.tgz", - "integrity": "sha512-9rufe0wnJusCQoLpV9ZPKIVP55itrM5BxOXs10DmdbRfgWtHy1LDyskbwRnBghuB0PrF7pNPOqREVtpz4HqzKw==", "dev": true, + "license": "ISC", "dependencies": { "npm-bundled": "^1.1.1", "npm-normalize-package-bin": "^1.0.1" @@ -3106,24 +2575,12 @@ } }, "node_modules/@npmcli/move-file": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@npmcli/move-file/-/move-file-1.0.1.tgz", - "integrity": "sha512-Uv6h1sT+0DrblvIrolFtbvM1FgWm+/sy4B3pvLp67Zys+thcukzS5ekn7HsZFGpWP4Q3fYJCljbWQE/XivMRLw==", + "version": "1.1.2", "dev": true, + "license": "MIT", "dependencies": { - "mkdirp": "^1.0.4" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@npmcli/move-file/node_modules/mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "dev": true, - "bin": { - "mkdirp": "bin/cmd.js" + "mkdirp": "^1.0.4", + "rimraf": "^3.0.2" }, "engines": { "node": ">=10" @@ -3131,24 +2588,21 @@ }, "node_modules/@npmcli/node-gyp": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@npmcli/node-gyp/-/node-gyp-1.0.2.tgz", - "integrity": "sha512-yrJUe6reVMpktcvagumoqD9r08fH1iRo01gn1u0zoCApa9lnZGEigVKUd2hzsCId4gdtkZZIVscLhNxMECKgRg==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/@npmcli/promise-spawn": { "version": "1.3.2", - "resolved": "https://registry.npmjs.org/@npmcli/promise-spawn/-/promise-spawn-1.3.2.tgz", - "integrity": "sha512-QyAGYo/Fbj4MXeGdJcFzZ+FkDkomfRBrPM+9QYJSg+PxgAUL+LU3FneQk37rKR2/zjqkCV1BLHccX98wRXG3Sg==", "dev": true, + "license": "ISC", "dependencies": { "infer-owner": "^1.0.4" } }, "node_modules/@npmcli/run-script": { - "version": "1.8.4", - "resolved": "https://registry.npmjs.org/@npmcli/run-script/-/run-script-1.8.4.tgz", - "integrity": "sha512-Yd9HXTtF1JGDXZw0+SOn+mWLYS0e7bHBHVC/2C8yqs4wUrs/k8rwBSinD7rfk+3WG/MFGRZKxjyoD34Pch2E/A==", + "version": "1.8.5", "dev": true, + "license": "ISC", "dependencies": { "@npmcli/node-gyp": "^1.0.2", "@npmcli/promise-spawn": "^1.3.2", @@ -3159,9 +2613,8 @@ }, "node_modules/@npmcli/run-script/node_modules/read-package-json-fast": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/read-package-json-fast/-/read-package-json-fast-2.0.2.tgz", - "integrity": "sha512-5fyFUyO9B799foVk4n6ylcoAktG/FbE3jwRKxvwaeSrIunaoMc0u81dzXxjeAFKOce7O5KncdfwpGvvs6r5PsQ==", "dev": true, + "license": "ISC", "dependencies": { "json-parse-even-better-errors": "^2.3.0", "npm-normalize-package-bin": "^1.0.1" @@ -3171,13 +2624,12 @@ } }, "node_modules/@schematics/angular": { - "version": "11.2.4", - "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-11.2.4.tgz", - "integrity": "sha512-HKWpcmfJfx5fryDdVGN1s+AmzOCKViQQGrEZmDTC2PhA6Vg+SOeMKesyFvdOqf4Ld1ZNYw9Kg94wrpz6rycP/Q==", + "version": "11.2.14", "dev": true, + "license": "MIT", "dependencies": { - "@angular-devkit/core": "11.2.4", - "@angular-devkit/schematics": "11.2.4", + "@angular-devkit/core": "11.2.14", + "@angular-devkit/schematics": "11.2.14", "jsonc-parser": "3.0.0" }, "engines": { @@ -3187,13 +2639,12 @@ } }, "node_modules/@schematics/update": { - "version": "0.1102.4", - "resolved": "https://registry.npmjs.org/@schematics/update/-/update-0.1102.4.tgz", - "integrity": "sha512-YgwbnTAok1NcolqFicc4S4tFxASfXttWsbHju4XArym1/KQMUjY8ZOdj4pe56akzrWXuCexZFpjgoYyYyXBuYQ==", + "version": "0.1102.14", "dev": true, + "license": "MIT", "dependencies": { - "@angular-devkit/core": "11.2.4", - "@angular-devkit/schematics": "11.2.4", + "@angular-devkit/core": "11.2.14", + "@angular-devkit/schematics": "11.2.14", "@yarnpkg/lockfile": "1.1.0", "ini": "2.0.0", "npm-package-arg": "^8.0.0", @@ -3207,130 +2658,108 @@ "yarn": ">= 1.13.0" } }, - "node_modules/@schematics/update/node_modules/semver": { - "version": "7.3.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.4.tgz", - "integrity": "sha512-tCfb2WLjqFAtXn4KEdxIhalnRtoKFN7nAwj0B3ZXCbQloV2tq5eDbcTmT68JJD3nRJq24/XgxtQKFIpQdtvmVw==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, + "node_modules/@start9labs/emver": { + "version": "0.1.4", + "license": "MIT" + }, + "node_modules/@stencil/core": { + "version": "2.6.0", + "license": "MIT", "bin": { - "semver": "bin/semver.js" + "stencil": "bin/stencil" }, "engines": { - "node": ">=10" + "node": ">=12.10.0", + "npm": ">=6.0.0" } }, - "node_modules/@start9labs/emver": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@start9labs/emver/-/emver-0.1.1.tgz", - "integrity": "sha512-UvholOAhRBATB/mSoovCqxZrZ/tEzIXOtGt5fEyKWiJp35cRTiku/XwI+MKY+TVJdqFPLqgPtwUQW6FqVhJUCw==" - }, "node_modules/@tootallnate/once": { "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", - "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==", "dev": true, + "license": "MIT", "engines": { "node": ">= 6" } }, - "node_modules/@types/bn.js": { - "version": "4.11.6", - "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-4.11.6.tgz", - "integrity": "sha512-pqr857jrp2kPuO9uRjZ3PwnJTjoQy+fcdxvBTvHm6dkmEL9q+hDD/2j/0ELOBPtPnS8LjCX0gI9nbl8lVkadpg==", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/elliptic": { - "version": "6.4.12", - "resolved": "https://registry.npmjs.org/@types/elliptic/-/elliptic-6.4.12.tgz", - "integrity": "sha512-gP1KsqoouLJGH6IJa28x7PXb3cRqh83X8HCLezd2dF+XcAIMKYv53KV+9Zn6QA561E120uOqZBQ+Jy/cl+fviw==", - "dependencies": { - "@types/bn.js": "*" + "node_modules/@trysound/sax": { + "version": "0.1.1", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=10.13.0" } }, "node_modules/@types/glob": { - "version": "7.1.3", - "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.1.3.tgz", - "integrity": "sha512-SEYeGAIQIQX8NN6LDKprLjbrd5dARM5EXsd8GI/A5l0apYI1fGMWgPHSe4ZKL4eozlAyI+doUE9XbYS4xCkQ1w==", + "version": "7.1.4", "dev": true, + "license": "MIT", "dependencies": { "@types/minimatch": "*", "@types/node": "*" } }, "node_modules/@types/json-pointer": { - "version": "1.0.30", - "resolved": "https://registry.npmjs.org/@types/json-pointer/-/json-pointer-1.0.30.tgz", - "integrity": "sha1-uXPB95sfYdQkt9krlU4B5saO5m0=", - "dev": true + "version": "1.0.31", + "dev": true, + "license": "MIT" }, "node_modules/@types/json-schema": { - "version": "7.0.6", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.6.tgz", - "integrity": "sha512-3c+yGKvVP5Y9TYBEibGNR+kLtijnj7mYrXRg+WpFb2X9xm04g/DXYkfg4hmzJQosc9snFNUPkbYIhu+KAm6jJw==", - "dev": true + "version": "7.0.8", + "dev": true, + "license": "MIT" }, "node_modules/@types/marked": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@types/marked/-/marked-1.2.0.tgz", - "integrity": "sha512-Kj9T+GlJrQQbXL0R6/zuYLaqlrtTmEVXl5LojsjA3KbPn1IpetEUFwJWCi4aDgATtvaR5Yj5vqSGX9upoLbBng==", - "dev": true + "version": "2.0.4", + "dev": true, + "license": "MIT" }, "node_modules/@types/minimatch": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.3.tgz", - "integrity": "sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA==", - "dev": true + "version": "3.0.5", + "dev": true, + "license": "MIT" }, "node_modules/@types/node": { - "version": "14.14.10", - "resolved": "https://registry.npmjs.org/@types/node/-/node-14.14.10.tgz", - "integrity": "sha512-J32dgx2hw8vXrSbu4ZlVhn1Nm3GbeCFNw2FWL8S5QKucHGY0cyNwjdQdO+KMBZ4wpmC7KhLCiNsdk1RFRIYUQQ==" + "version": "15.14.2", + "dev": true, + "license": "MIT" }, "node_modules/@types/parse-json": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==", - "dev": true - }, - "node_modules/@types/q": { - "version": "1.5.4", - "resolved": "https://registry.npmjs.org/@types/q/-/q-1.5.4.tgz", - "integrity": "sha512-1HcDas8SEj4z1Wc696tH56G8OlRaH/sqZOynNNB+HF0WOeXPaxTtbYzJY2oEfiUxjSKjhCKr+MvR7dCHcEelug==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@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==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@types/uuid": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-8.3.0.tgz", - "integrity": "sha512-eQ9qFW/fhfGJF8WKHGEHZEyVWfZxrT+6CLIJGBcZPfxUh/+BnEj+UCGYMlr9qZuX/2AltsvwrGqp0LhEW8D0zQ==", - "dev": true + "version": "8.3.1", + "dev": true, + "license": "MIT" }, "node_modules/@types/webpack-sources": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/@types/webpack-sources/-/webpack-sources-0.1.8.tgz", - "integrity": "sha512-JHB2/xZlXOjzjBB6fMOpH1eQAfsrpqVVIbneE0Rok16WXwFaznaI5vfg75U5WgGJm7V9W1c4xeRQDjX/zwvghA==", + "version": "0.1.9", "dev": true, + "license": "MIT", "dependencies": { "@types/node": "*", "@types/source-list-map": "*", "source-map": "^0.6.1" } }, + "node_modules/@types/webpack-sources/node_modules/source-map": { + "version": "0.6.1", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/@webassemblyjs/ast": { "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.9.0.tgz", - "integrity": "sha512-C6wW5L+b7ogSDVqymbkkvuW9kruN//YisMED04xzeBBqjHa2FYnmvOlS6Xj68xWQRgWvI9cIglsjFowH/RJyEA==", "dev": true, + "license": "MIT", "dependencies": { "@webassemblyjs/helper-module-context": "1.9.0", "@webassemblyjs/helper-wasm-bytecode": "1.9.0", @@ -3339,57 +2768,49 @@ }, "node_modules/@webassemblyjs/floating-point-hex-parser": { "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==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@webassemblyjs/helper-api-error": { "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.9.0.tgz", - "integrity": "sha512-NcMLjoFMXpsASZFxJ5h2HZRcEhDkvnNFOAKneP5RbKRzaWJN36NC4jqQHKwStIhGXu5mUWlUUk7ygdtrO8lbmw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@webassemblyjs/helper-buffer": { "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.9.0.tgz", - "integrity": "sha512-qZol43oqhq6yBPx7YM3m9Bv7WMV9Eevj6kMi6InKOuZxhw+q9hOkvq5e/PpKSiLfyetpaBnogSbNCfBwyB00CA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@webassemblyjs/helper-code-frame": { "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==", "dev": true, + "license": "MIT", "dependencies": { "@webassemblyjs/wast-printer": "1.9.0" } }, "node_modules/@webassemblyjs/helper-fsm": { "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-fsm/-/helper-fsm-1.9.0.tgz", - "integrity": "sha512-OPRowhGbshCb5PxJ8LocpdX9Kl0uB4XsAjl6jH/dWKlk/mzsANvhwbiULsaiqT5GZGT9qinTICdj6PLuM5gslw==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/@webassemblyjs/helper-module-context": { "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==", "dev": true, + "license": "MIT", "dependencies": { "@webassemblyjs/ast": "1.9.0" } }, "node_modules/@webassemblyjs/helper-wasm-bytecode": { "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==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@webassemblyjs/helper-wasm-section": { "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==", "dev": true, + "license": "MIT", "dependencies": { "@webassemblyjs/ast": "1.9.0", "@webassemblyjs/helper-buffer": "1.9.0", @@ -3399,33 +2820,29 @@ }, "node_modules/@webassemblyjs/ieee754": { "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.9.0.tgz", - "integrity": "sha512-dcX8JuYU/gvymzIHc9DgxTzUUTLexWwt8uCTWP3otys596io0L5aW02Gb1RjYpx2+0Jus1h4ZFqjla7umFniTg==", "dev": true, + "license": "MIT", "dependencies": { "@xtuc/ieee754": "^1.2.0" } }, "node_modules/@webassemblyjs/leb128": { "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.9.0.tgz", - "integrity": "sha512-ENVzM5VwV1ojs9jam6vPys97B/S65YQtv/aanqnU7D8aSoHFX8GyhGg0CMfyKNIHBuAVjy3tlzd5QMMINa7wpw==", "dev": true, + "license": "MIT", "dependencies": { "@xtuc/long": "4.2.2" } }, "node_modules/@webassemblyjs/utf8": { "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.9.0.tgz", - "integrity": "sha512-GZbQlWtopBTP0u7cHrEx+73yZKrQoBMpwkGEIqlacljhXCkVM1kMQge/Mf+csMJAjEdSwhOyLAS0AoR3AG5P8w==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@webassemblyjs/wasm-edit": { "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.9.0.tgz", - "integrity": "sha512-FgHzBm80uwz5M8WKnMTn6j/sVbqilPdQXTWraSjBwFXSYGirpkSWE2R9Qvz9tNiTKQvoKILpCuTjBKzOIm0nxw==", "dev": true, + "license": "MIT", "dependencies": { "@webassemblyjs/ast": "1.9.0", "@webassemblyjs/helper-buffer": "1.9.0", @@ -3439,9 +2856,8 @@ }, "node_modules/@webassemblyjs/wasm-gen": { "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.9.0.tgz", - "integrity": "sha512-cPE3o44YzOOHvlsb4+E9qSqjc9Qf9Na1OO/BHFy4OI91XDE14MjFN4lTMezzaIWdPqHnsTodGGNP+iRSYfGkjA==", "dev": true, + "license": "MIT", "dependencies": { "@webassemblyjs/ast": "1.9.0", "@webassemblyjs/helper-wasm-bytecode": "1.9.0", @@ -3452,9 +2868,8 @@ }, "node_modules/@webassemblyjs/wasm-opt": { "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.9.0.tgz", - "integrity": "sha512-Qkjgm6Anhm+OMbIL0iokO7meajkzQD71ioelnfPEj6r4eOFuqm4YC3VBPqXjFyyNwowzbMD+hizmprP/Fwkl2A==", "dev": true, + "license": "MIT", "dependencies": { "@webassemblyjs/ast": "1.9.0", "@webassemblyjs/helper-buffer": "1.9.0", @@ -3464,9 +2879,8 @@ }, "node_modules/@webassemblyjs/wasm-parser": { "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.9.0.tgz", - "integrity": "sha512-9+wkMowR2AmdSWQzsPEjFU7njh8HTO5MqO8vjwEHuM+AMHioNqSBONRdr0NQQ3dVQrzp0s8lTcYqzUdb7YgELA==", "dev": true, + "license": "MIT", "dependencies": { "@webassemblyjs/ast": "1.9.0", "@webassemblyjs/helper-api-error": "1.9.0", @@ -3478,9 +2892,8 @@ }, "node_modules/@webassemblyjs/wast-parser": { "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==", "dev": true, + "license": "MIT", "dependencies": { "@webassemblyjs/ast": "1.9.0", "@webassemblyjs/floating-point-hex-parser": "1.9.0", @@ -3492,9 +2905,8 @@ }, "node_modules/@webassemblyjs/wast-printer": { "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==", "dev": true, + "license": "MIT", "dependencies": { "@webassemblyjs/ast": "1.9.0", "@webassemblyjs/wast-parser": "1.9.0", @@ -3503,39 +2915,33 @@ }, "node_modules/@xtuc/ieee754": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", - "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", - "dev": true + "dev": true, + "license": "BSD-3-Clause" }, "node_modules/@xtuc/long": { "version": "4.2.2", - "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", - "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", - "dev": true + "dev": true, + "license": "Apache-2.0" }, "node_modules/@yarnpkg/lockfile": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@yarnpkg/lockfile/-/lockfile-1.1.0.tgz", - "integrity": "sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ==", - "dev": true + "dev": true, + "license": "BSD-2-Clause" }, "node_modules/abab": { "version": "2.0.5", - "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.5.tgz", - "integrity": "sha512-9IK9EadsbHo6jLWIpxpR6pL0sazTXV6+SQv25ZB+F7Bj9mJNaOc4nCRabwd5M/JwmUa8idz6Eci6eKfJryPs6Q==", - "dev": true + "dev": true, + "license": "BSD-3-Clause" }, "node_modules/abbrev": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", - "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/accepts": { "version": "1.3.7", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", - "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==", "dev": true, + "license": "MIT", "dependencies": { "mime-types": "~2.1.24", "negotiator": "0.6.2" @@ -3546,9 +2952,8 @@ }, "node_modules/acorn": { "version": "6.4.2", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.4.2.tgz", - "integrity": "sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ==", "dev": true, + "license": "MIT", "bin": { "acorn": "bin/acorn" }, @@ -3557,10 +2962,9 @@ } }, "node_modules/adjust-sourcemap-loader": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/adjust-sourcemap-loader/-/adjust-sourcemap-loader-3.0.0.tgz", - "integrity": "sha512-YBrGyT2/uVQ/c6Rr+t6ZJXniY03YtHGMJQYal368burRGYKqhx9qGTWqcBU5s1CwYY9E/ri63RYyG1IacMZtqw==", + "version": "4.0.0", "dev": true, + "license": "MIT", "dependencies": { "loader-utils": "^2.0.0", "regex-parser": "^2.2.11" @@ -3571,9 +2975,8 @@ }, "node_modules/agent-base": { "version": "6.0.2", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", - "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", "dev": true, + "license": "MIT", "dependencies": { "debug": "4" }, @@ -3583,9 +2986,8 @@ }, "node_modules/agentkeepalive": { "version": "4.1.4", - "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.1.4.tgz", - "integrity": "sha512-+V/rGa3EuU74H6wR04plBb7Ks10FbtUQgRj/FQOG7uUIEuaINI+AiqJR1k6t3SVNs7o7ZjIdus6706qqzVq8jQ==", "dev": true, + "license": "MIT", "dependencies": { "debug": "^4.1.0", "depd": "^1.1.2", @@ -3597,9 +2999,8 @@ }, "node_modules/aggregate-error": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", - "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", "dev": true, + "license": "MIT", "dependencies": { "clean-stack": "^2.0.0", "indent-string": "^4.0.0" @@ -3610,8 +3011,7 @@ }, "node_modules/ajv": { "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "license": "MIT", "dependencies": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", @@ -3625,56 +3025,50 @@ }, "node_modules/ajv-errors": { "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==", "dev": true, + "license": "MIT", "peerDependencies": { "ajv": ">=5.0.0" } }, "node_modules/ajv-keywords": { "version": "3.5.2", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", - "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", "dev": true, + "license": "MIT", "peerDependencies": { "ajv": "^6.9.1" } }, "node_modules/alphanum-sort": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/alphanum-sort/-/alphanum-sort-1.0.2.tgz", - "integrity": "sha1-l6ERlkmyEa0zaR2fn0hqjsn74KM=", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/angularx-qrcode": { - "version": "10.0.11", - "resolved": "https://registry.npmjs.org/angularx-qrcode/-/angularx-qrcode-10.0.11.tgz", - "integrity": "sha512-sbtqdqAboEFNoyxgG4FQYPZDzwX9TlICT2mLpsC/Se3OuT+HntW56q8E/i1BL1fJhx7zt0JJR7bc7LfofUeAlQ==", + "version": "11.0.0", + "license": "MIT", "dependencies": { "qrcode": "1.4.2", "tslib": "^2.0.0" }, "peerDependencies": { - "@angular/core": "^10.0.2" + "@angular/core": "^11.0.6" } }, "node_modules/ansi-colors": { "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", - "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } }, "node_modules/ansi-escapes": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.1.tgz", - "integrity": "sha512-JWF7ocqNrp8u9oqpgV+wH5ftbt+cfvv+PTjOvKLT3AdYly/LmORARfEVT1iyjwN+4MqE5UmVKoAdIBqeoCHgLA==", + "version": "4.3.2", "dev": true, + "license": "MIT", "dependencies": { - "type-fest": "^0.11.0" + "type-fest": "^0.21.3" }, "engines": { "node": ">=8" @@ -3685,28 +3079,26 @@ }, "node_modules/ansi-html": { "version": "0.0.7", - "resolved": "https://registry.npmjs.org/ansi-html/-/ansi-html-0.0.7.tgz", - "integrity": "sha1-gTWEAhliqenm/QOflA0S9WynhZ4=", "dev": true, "engines": [ "node >= 0.8.0" ], + "license": "Apache-2.0", "bin": { "ansi-html": "bin/ansi-html" } }, "node_modules/ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "version": "5.0.0", + "dev": true, + "license": "MIT", "engines": { - "node": ">=6" + "node": ">=8" } }, "node_modules/ansi-styles": { "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==", + "license": "MIT", "dependencies": { "color-convert": "^1.9.0" }, @@ -3715,10 +3107,9 @@ } }, "node_modules/anymatch": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.1.tgz", - "integrity": "sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg==", + "version": "3.1.2", "dev": true, + "license": "ISC", "dependencies": { "normalize-path": "^3.0.0", "picomatch": "^2.0.4" @@ -3729,15 +3120,13 @@ }, "node_modules/aproba": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", - "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/are-we-there-yet": { "version": "1.1.5", - "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz", - "integrity": "sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w==", "dev": true, + "license": "ISC", "dependencies": { "delegates": "^1.0.0", "readable-stream": "^2.0.6" @@ -3745,15 +3134,13 @@ }, "node_modules/are-we-there-yet/node_modules/isarray": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/are-we-there-yet/node_modules/readable-stream": { "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", "dev": true, + "license": "MIT", "dependencies": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", @@ -3764,115 +3151,92 @@ "util-deprecate": "~1.0.1" } }, - "node_modules/are-we-there-yet/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, "node_modules/are-we-there-yet/node_modules/string_decoder": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "dev": true, + "license": "MIT", "dependencies": { "safe-buffer": "~5.1.0" } }, "node_modules/arg": { "version": "4.1.3", - "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", - "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/argparse": { "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", "dev": true, + "license": "MIT", "dependencies": { "sprintf-js": "~1.0.2" } }, - "node_modules/arity-n": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/arity-n/-/arity-n-1.0.4.tgz", - "integrity": "sha1-2edrEXM+CFacCEeuezmyhgswt0U=", - "dev": true - }, "node_modules/arr-diff": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", - "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/arr-flatten": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", - "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/arr-union": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", - "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/array-flatten": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.2.tgz", - "integrity": "sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ==", - "dev": true + "version": "1.1.1", + "dev": true, + "license": "MIT" }, "node_modules/array-union": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/array-uniq": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", - "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/array-unique": { "version": "0.3.2", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", - "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/asn1": { "version": "0.2.4", - "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", - "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", "dev": true, + "license": "MIT", "dependencies": { "safer-buffer": "~2.1.0" } }, "node_modules/asn1.js": { "version": "5.4.1", - "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-5.4.1.tgz", - "integrity": "sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA==", + "dev": true, + "license": "MIT", "dependencies": { "bn.js": "^4.0.0", "inherits": "^2.0.1", @@ -3880,11 +3244,15 @@ "safer-buffer": "^2.1.0" } }, + "node_modules/asn1.js/node_modules/bn.js": { + "version": "4.12.0", + "dev": true, + "license": "MIT" + }, "node_modules/assert": { "version": "1.5.0", - "resolved": "https://registry.npmjs.org/assert/-/assert-1.5.0.tgz", - "integrity": "sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA==", "dev": true, + "license": "MIT", "dependencies": { "object-assign": "^4.1.1", "util": "0.10.3" @@ -3892,87 +3260,76 @@ }, "node_modules/assert-plus": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", "dev": true, + "license": "MIT", "engines": { "node": ">=0.8" } }, "node_modules/assert/node_modules/inherits": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", - "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/assert/node_modules/util": { "version": "0.10.3", - "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz", - "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=", "dev": true, + "license": "MIT", "dependencies": { "inherits": "2.0.1" } }, "node_modules/assign-symbols": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", - "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/astral-regex": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", - "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/async": { "version": "2.6.3", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.3.tgz", - "integrity": "sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==", "dev": true, + "license": "MIT", "dependencies": { "lodash": "^4.17.14" } }, "node_modules/async-each": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.3.tgz", - "integrity": "sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/async-limiter": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz", - "integrity": "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/asynckit": { "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/at-least-node": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", - "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", "dev": true, + "license": "ISC", "engines": { "node": ">= 4.0.0" } }, "node_modules/atob": { "version": "2.1.2", - "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", - "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", "dev": true, + "license": "(MIT OR Apache-2.0)", "bin": { "atob": "bin/atob.js" }, @@ -3981,81 +3338,71 @@ } }, "node_modules/autoprefixer": { - "version": "9.8.6", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-9.8.6.tgz", - "integrity": "sha512-XrvP4VVHdRBCdX1S3WXVD8+RyG9qeb1D5Sn1DeLiG2xfSpzellk5k54xbUERJ3M5DggQxes39UGOTP8CFrEGbg==", + "version": "10.2.4", "dev": true, + "license": "MIT", "dependencies": { - "browserslist": "^4.12.0", - "caniuse-lite": "^1.0.30001109", + "browserslist": "^4.16.1", + "caniuse-lite": "^1.0.30001181", "colorette": "^1.2.1", + "fraction.js": "^4.0.13", "normalize-range": "^0.1.2", - "num2fraction": "^1.2.2", - "postcss": "^7.0.32", "postcss-value-parser": "^4.1.0" }, "bin": { "autoprefixer": "bin/autoprefixer" }, + "engines": { + "node": "^10 || ^12 || >=14" + }, "funding": { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/autoprefixer" + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + "peerDependencies": { + "postcss": "^8.1.0" } }, + "node_modules/autoprefixer/node_modules/colorette": { + "version": "1.2.2", + "dev": true, + "license": "MIT" + }, "node_modules/aws-sign2": { "version": "0.7.0", - "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", - "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=", "dev": true, + "license": "Apache-2.0", "engines": { "node": "*" } }, "node_modules/aws4": { "version": "1.11.0", - "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.11.0.tgz", - "integrity": "sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/babel-loader": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.1.0.tgz", - "integrity": "sha512-7q7nC1tYOrqvUrN3LQK4GwSk/TQorZSOlO9C+RZDZpODgyN4ZlCqE5q9cDsyWOliN+aU9B4JX01xK9eJXowJLw==", + "version": "8.2.2", "dev": true, + "license": "MIT", "dependencies": { - "find-cache-dir": "^2.1.0", + "find-cache-dir": "^3.3.1", "loader-utils": "^1.4.0", - "mkdirp": "^0.5.3", - "pify": "^4.0.1", + "make-dir": "^3.1.0", "schema-utils": "^2.6.5" }, "engines": { - "node": ">= 6.9" + "node": ">= 8.9" }, "peerDependencies": { "@babel/core": "^7.0.0", "webpack": ">=2" } }, - "node_modules/babel-loader/node_modules/find-cache-dir": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.1.0.tgz", - "integrity": "sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==", - "dev": true, - "dependencies": { - "commondir": "^1.0.1", - "make-dir": "^2.0.0", - "pkg-dir": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, "node_modules/babel-loader/node_modules/json5": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", "dev": true, + "license": "MIT", "dependencies": { "minimist": "^1.2.0" }, @@ -4065,9 +3412,8 @@ }, "node_modules/babel-loader/node_modules/loader-utils": { "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", - "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", "dev": true, + "license": "MIT", "dependencies": { "big.js": "^5.2.2", "emojis-list": "^3.0.0", @@ -4079,24 +3425,21 @@ }, "node_modules/babel-plugin-dynamic-import-node": { "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==", "dev": true, + "license": "MIT", "dependencies": { "object.assign": "^4.1.0" } }, "node_modules/balanced-match": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", - "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", - "dev": true + "version": "1.0.2", + "dev": true, + "license": "MIT" }, "node_modules/base": { "version": "0.11.2", - "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", - "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", "dev": true, + "license": "MIT", "dependencies": { "cache-base": "^1.0.1", "class-utils": "^0.3.5", @@ -4110,19 +3453,10 @@ "node": ">=0.10.0" } }, - "node_modules/base-x": { - "version": "3.0.8", - "resolved": "https://registry.npmjs.org/base-x/-/base-x-3.0.8.tgz", - "integrity": "sha512-Rl/1AWP4J/zRrk54hhlxH4drNxPJXYUaKffODVI53/dAsV4t9fBxyxYKAVPU1XBHxYwOWP9h9H0hM2MVw4YfJA==", - "dependencies": { - "safe-buffer": "^5.0.1" - } - }, "node_modules/base/node_modules/define-property": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", "dev": true, + "license": "MIT", "dependencies": { "is-descriptor": "^1.0.0" }, @@ -4130,225 +3464,8 @@ "node": ">=0.10.0" } }, - "node_modules/base/node_modules/is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "dependencies": { - "kind-of": "^6.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/base/node_modules/is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "dependencies": { - "kind-of": "^6.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/base/node_modules/is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "dependencies": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/base32.js": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/base32.js/-/base32.js-0.1.0.tgz", - "integrity": "sha1-tYLexpPC8R6JPPBk7mrFthMaIgI=", - "engines": { - "node": ">=0.12.0" - } - }, "node_modules/base64-js": { "version": "1.5.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", - "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/base64url": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/base64url/-/base64url-3.0.1.tgz", - "integrity": "sha512-ir1UPr3dkwexU7FdV8qBBbNDRUhMmIekYMFZfi+C/sLNnRESKPl23nB9b2pltqfOQNnGzsDdId90AEtG5tCx4A==", - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/batch": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", - "integrity": "sha1-3DQxT05nkxgJP8dgJyUl+UvyXBY=", - "dev": true - }, - "node_modules/bcrypt-pbkdf": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", - "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", - "dev": true, - "dependencies": { - "tweetnacl": "^0.14.3" - } - }, - "node_modules/bech32": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/bech32/-/bech32-1.1.4.tgz", - "integrity": "sha512-s0IrSOzLlbvX7yp4WBfPITzpAU8sqQcpsmwXDiKwrG4r491vwCO/XpejasRNl0piBMe/DvP4Tz0mIS/X1DPJBQ==" - }, - "node_modules/big.js": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", - "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", - "dev": true, - "engines": { - "node": "*" - } - }, - "node_modules/binary-extensions": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.1.0.tgz", - "integrity": "sha512-1Yj8h9Q+QDF5FzhMs/c9+6UntbD5MkRfRwac8DoEm9ZfUBZ7tZ55YcGVAzEe4bXsdQHEk+s9S5wsOKVdZrw0tQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/bindings": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", - "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", - "dependencies": { - "file-uri-to-path": "1.0.0" - } - }, - "node_modules/bip174": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/bip174/-/bip174-2.0.1.tgz", - "integrity": "sha512-i3X26uKJOkDTAalYAp0Er+qGMDhrbbh2o93/xiPyAN2s25KrClSpe3VXo/7mNJoqA5qfko8rLS2l3RWZgYmjKQ==", - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/bip32": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/bip32/-/bip32-2.0.6.tgz", - "integrity": "sha512-HpV5OMLLGTjSVblmrtYRfFFKuQB+GArM0+XP8HGWfJ5vxYBqo+DesvJwOdC2WJ3bCkZShGf0QIfoIpeomVzVdA==", - "dependencies": { - "@types/node": "10.12.18", - "bs58check": "^2.1.1", - "create-hash": "^1.2.0", - "create-hmac": "^1.1.7", - "tiny-secp256k1": "^1.1.3", - "typeforce": "^1.11.5", - "wif": "^2.0.6" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/bip32/node_modules/@types/node": { - "version": "10.12.18", - "resolved": "https://registry.npmjs.org/@types/node/-/node-10.12.18.tgz", - "integrity": "sha512-fh+pAqt4xRzPfqA6eh3Z2y6fyZavRIumvjhaCL753+TVkGKGhpPeyrJG2JftD0T9q4GF00KjefsQ+PQNDdWQaQ==" - }, - "node_modules/bip39": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/bip39/-/bip39-3.0.3.tgz", - "integrity": "sha512-P0dKrz4g0V0BjXfx7d9QNkJ/Txcz/k+hM9TnjqjUaXtuOfAvxXSw2rJw8DX0e3ZPwnK/IgDxoRqf0bvoVCqbMg==", - "dependencies": { - "@types/node": "11.11.6", - "create-hash": "^1.1.0", - "pbkdf2": "^3.0.9", - "randombytes": "^2.0.1" - } - }, - "node_modules/bip39/node_modules/@types/node": { - "version": "11.11.6", - "resolved": "https://registry.npmjs.org/@types/node/-/node-11.11.6.tgz", - "integrity": "sha512-Exw4yUWMBXM3X+8oqzJNRqZSwUAaS4+7NdvHqQuFi/d+synz++xmX3QIf+BFqneW8N31R8Ky+sikfZUXq07ggQ==" - }, - "node_modules/bip66": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/bip66/-/bip66-1.1.5.tgz", - "integrity": "sha1-AfqHSHhcpwlV1QESF9GzE5lpyiI=", - "dependencies": { - "safe-buffer": "^5.0.1" - } - }, - "node_modules/bitcoin-ops": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/bitcoin-ops/-/bitcoin-ops-1.4.1.tgz", - "integrity": "sha512-pef6gxZFztEhaE9RY9HmWVmiIHqCb2OyS4HPKkpc6CIiiOa3Qmuoylxc5P2EkU3w+5eTSifI9SEZC88idAIGow==" - }, - "node_modules/bitcoinjs-lib": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/bitcoinjs-lib/-/bitcoinjs-lib-5.2.0.tgz", - "integrity": "sha512-5DcLxGUDejgNBYcieMIUfjORtUeNWl828VWLHJGVKZCb4zIS1oOySTUr0LGmcqJBQgTBz3bGbRQla4FgrdQEIQ==", - "dependencies": { - "bech32": "^1.1.2", - "bip174": "^2.0.1", - "bip32": "^2.0.4", - "bip66": "^1.1.0", - "bitcoin-ops": "^1.4.0", - "bs58check": "^2.0.0", - "create-hash": "^1.1.0", - "create-hmac": "^1.1.3", - "merkle-lib": "^2.0.10", - "pushdata-bitcoin": "^1.0.1", - "randombytes": "^2.0.1", - "tiny-secp256k1": "^1.1.1", - "typeforce": "^1.11.3", - "varuint-bitcoin": "^1.0.4", - "wif": "^2.0.1" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/bl": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", - "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", - "dev": true, - "dependencies": { - "buffer": "^5.5.0", - "inherits": "^2.0.4", - "readable-stream": "^3.4.0" - } - }, - "node_modules/bl/node_modules/buffer": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", - "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", "dev": true, "funding": [ { @@ -4364,27 +3481,61 @@ "url": "https://feross.org/support" } ], + "license": "MIT" + }, + "node_modules/batch": { + "version": "0.6.1", + "dev": true, + "license": "MIT" + }, + "node_modules/bcrypt-pbkdf": { + "version": "1.0.2", + "dev": true, + "license": "BSD-3-Clause", "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" + "tweetnacl": "^0.14.3" + } + }, + "node_modules/big.js": { + "version": "5.2.2", + "dev": true, + "license": "MIT", + "engines": { + "node": "*" + } + }, + "node_modules/binary-extensions": { + "version": "2.2.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/bl": { + "version": "4.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" } }, "node_modules/bluebird": { "version": "3.7.2", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", - "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/bn.js": { - "version": "4.11.9", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", - "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==" + "version": "5.2.0", + "dev": true, + "license": "MIT" }, "node_modules/body-parser": { "version": "1.19.0", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz", - "integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==", "dev": true, + "license": "MIT", "dependencies": { "bytes": "3.1.0", "content-type": "~1.0.4", @@ -4401,47 +3552,23 @@ "node": ">= 0.8" } }, - "node_modules/body-parser/node_modules/bytes": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", - "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==", - "dev": true, - "engines": { - "node": ">= 0.8" - } - }, "node_modules/body-parser/node_modules/debug": { "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dev": true, + "license": "MIT", "dependencies": { "ms": "2.0.0" } }, - "node_modules/body-parser/node_modules/iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "dev": true, - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/body-parser/node_modules/ms": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/bonjour": { "version": "3.5.0", - "resolved": "https://registry.npmjs.org/bonjour/-/bonjour-3.5.0.tgz", - "integrity": "sha1-jokKGD2O6aI5OzhExpGkK897yfU=", "dev": true, + "license": "MIT", "dependencies": { "array-flatten": "^2.1.0", "deep-equal": "^1.0.1", @@ -4451,17 +3578,20 @@ "multicast-dns-service-types": "^1.1.0" } }, + "node_modules/bonjour/node_modules/array-flatten": { + "version": "2.1.2", + "dev": true, + "license": "MIT" + }, "node_modules/boolbase": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", - "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/brace-expansion": { "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, + "license": "MIT", "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -4469,9 +3599,8 @@ }, "node_modules/braces": { "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", "dev": true, + "license": "MIT", "dependencies": { "fill-range": "^7.0.1" }, @@ -4481,14 +3610,13 @@ }, "node_modules/brorand": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", - "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=" + "dev": true, + "license": "MIT" }, "node_modules/browserify-aes": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", - "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", "dev": true, + "license": "MIT", "dependencies": { "buffer-xor": "^1.0.3", "cipher-base": "^1.0.0", @@ -4500,9 +3628,8 @@ }, "node_modules/browserify-cipher": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz", - "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==", "dev": true, + "license": "MIT", "dependencies": { "browserify-aes": "^1.0.4", "browserify-des": "^1.0.0", @@ -4511,9 +3638,8 @@ }, "node_modules/browserify-des": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz", - "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==", "dev": true, + "license": "MIT", "dependencies": { "cipher-base": "^1.0.1", "des.js": "^1.0.0", @@ -4523,25 +3649,17 @@ }, "node_modules/browserify-rsa": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.1.0.tgz", - "integrity": "sha512-AdEER0Hkspgno2aR97SAf6vi0y0k8NuOpGnVH3O99rcA5Q6sh8QxcngtHuJ6uXwnfAXNM4Gn1Gb7/MV1+Ymbog==", "dev": true, + "license": "MIT", "dependencies": { "bn.js": "^5.0.0", "randombytes": "^2.0.1" } }, - "node_modules/browserify-rsa/node_modules/bn.js": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.1.3.tgz", - "integrity": "sha512-GkTiFpjFtUzU9CbMeJ5iazkCzGL3jrhzerzZIuqLABjbwRaFt33I9tUdSNryIptM+RxDet6OKm2WnLXzW51KsQ==", - "dev": true - }, "node_modules/browserify-sign": { "version": "4.2.1", - "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.2.1.tgz", - "integrity": "sha512-/vrA5fguVAKKAVTNJjgSm1tRQDHUU6DbwO9IROu/0WAzC8PKhucDSh18J0RMvVeHAn5puMd+QHC2erPRNf8lmg==", "dev": true, + "license": "ISC", "dependencies": { "bn.js": "^5.1.1", "browserify-rsa": "^4.0.1", @@ -4554,32 +3672,43 @@ "safe-buffer": "^5.2.0" } }, - "node_modules/browserify-sign/node_modules/bn.js": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.1.3.tgz", - "integrity": "sha512-GkTiFpjFtUzU9CbMeJ5iazkCzGL3jrhzerzZIuqLABjbwRaFt33I9tUdSNryIptM+RxDet6OKm2WnLXzW51KsQ==", - "dev": true + "node_modules/browserify-sign/node_modules/safe-buffer": { + "version": "5.2.1", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" }, "node_modules/browserify-zlib": { "version": "0.2.0", - "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz", - "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==", "dev": true, + "license": "MIT", "dependencies": { "pako": "~1.0.5" } }, "node_modules/browserslist": { - "version": "4.15.0", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.15.0.tgz", - "integrity": "sha512-IJ1iysdMkGmjjYeRlDU8PQejVwxvVO5QOfXH7ylW31GO6LwNRSmm/SgRXtNsEXqMLl2e+2H5eEJ7sfynF8TCaQ==", + "version": "4.16.6", "dev": true, + "license": "MIT", "dependencies": { - "caniuse-lite": "^1.0.30001164", - "colorette": "^1.2.1", - "electron-to-chromium": "^1.3.612", + "caniuse-lite": "^1.0.30001219", + "colorette": "^1.2.2", + "electron-to-chromium": "^1.3.723", "escalade": "^3.1.1", - "node-releases": "^1.1.67" + "node-releases": "^1.1.71" }, "bin": { "browserslist": "cli.js" @@ -4592,94 +3721,79 @@ "url": "https://opencollective.com/browserslist" } }, - "node_modules/bs58": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/bs58/-/bs58-4.0.1.tgz", - "integrity": "sha1-vhYedsNU9veIrkBx9j806MTwpCo=", - "dependencies": { - "base-x": "^3.0.2" - } - }, - "node_modules/bs58check": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/bs58check/-/bs58check-2.1.2.tgz", - "integrity": "sha512-0TS1jicxdU09dwJMNZtVAfzPi6Q6QeN0pM1Fkzrjn+XYHvzMKPU3pHVpva+769iNVSfIYWf7LJ6WR+BuuMf8cA==", - "dependencies": { - "bs58": "^4.0.0", - "create-hash": "^1.1.0", - "safe-buffer": "^5.1.2" - } + "node_modules/browserslist/node_modules/colorette": { + "version": "1.2.2", + "dev": true, + "license": "MIT" }, "node_modules/buffer": { - "version": "4.9.2", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.2.tgz", - "integrity": "sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==", + "version": "5.7.1", "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", "dependencies": { - "base64-js": "^1.0.2", - "ieee754": "^1.1.4", - "isarray": "^1.0.0" + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" } }, "node_modules/buffer-from": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", - "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/buffer-indexof": { "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==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/buffer-xor": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", - "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=", - "dev": true - }, - "node_modules/buffer/node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/builtin-modules": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz", - "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/builtin-status-codes": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz", - "integrity": "sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug=", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/builtins": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/builtins/-/builtins-1.0.3.tgz", - "integrity": "sha1-y5T662HIaWRR2zZTThQi+U8K7og=", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/bytes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", - "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=", + "version": "3.1.0", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.8" } }, "node_modules/cacache": { "version": "15.0.5", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-15.0.5.tgz", - "integrity": "sha512-lloiL22n7sOjEEXdL8NAjTgv9a1u43xICE9/203qonkZUCj5X1UEWIdf2/Y0d6QcCtMzbKQyhrcDbdvlZTs/+A==", "dev": true, + "license": "ISC", "dependencies": { "@npmcli/move-file": "^1.0.1", "chownr": "^2.0.0", @@ -4703,23 +3817,10 @@ "node": ">= 10" } }, - "node_modules/cacache/node_modules/mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "dev": true, - "bin": { - "mkdirp": "bin/cmd.js" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/cache-base": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", - "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", "dev": true, + "license": "MIT", "dependencies": { "collection-visit": "^1.0.0", "component-emitter": "^1.2.1", @@ -4736,64 +3837,40 @@ } }, "node_modules/call-bind": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.0.tgz", - "integrity": "sha512-AEXsYIyyDY3MCzbwdhzG3Jx1R0J2wetQyUynn6dYHAO+bg8l1k7jwZtRv4ryryFs7EP+NDlikJlVe59jr0cM2w==", + "version": "1.0.2", "dev": true, + "license": "MIT", "dependencies": { "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.0" + "get-intrinsic": "^1.0.2" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/caller-callsite": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/caller-callsite/-/caller-callsite-2.0.0.tgz", - "integrity": "sha1-hH4PzgoiN1CpoCfFSzNzGtMVQTQ=", - "dev": true, - "dependencies": { - "callsites": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/caller-path": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-2.0.0.tgz", - "integrity": "sha1-Ro+DBE42mrIBD6xfBs7uFbsssfQ=", - "dev": true, - "dependencies": { - "caller-callsite": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, "node_modules/callsites": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-2.0.0.tgz", - "integrity": "sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA=", + "version": "3.1.0", "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "license": "MIT", "engines": { "node": ">=6" } }, + "node_modules/camelcase": { + "version": "6.2.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/caniuse-api": { "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==", "dev": true, + "license": "MIT", "dependencies": { "browserslist": "^4.0.0", "caniuse-lite": "^1.0.0", @@ -4802,28 +3879,28 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001164", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001164.tgz", - "integrity": "sha512-G+A/tkf4bu0dSp9+duNiXc7bGds35DioCyC6vgK2m/rjA4Krpy5WeZgZyfH2f0wj2kI6yAWWucyap6oOwmY1mg==", - "dev": true + "version": "1.0.30001243", + "dev": true, + "license": "CC-BY-4.0", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + } }, "node_modules/canonical-path": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/canonical-path/-/canonical-path-1.0.0.tgz", - "integrity": "sha512-feylzsbDxi1gPZ1IjystzIQZagYYLvfKrSuygUCgf7z6x790VEzze5QEkdSV1U58RA7Hi0+v6fv4K54atOzATg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/caseless": { "version": "0.12.0", - "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", - "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", - "dev": true + "dev": true, + "license": "Apache-2.0" }, "node_modules/chalk": { "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^3.2.1", "escape-string-regexp": "^1.0.5", @@ -4835,15 +3912,13 @@ }, "node_modules/chardet": { "version": "0.7.0", - "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", - "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/cheerio": { "version": "1.0.0-rc.3", - "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.3.tgz", - "integrity": "sha512-0td5ijfUPuubwLUu0OBoe98gZj8C/AA+RW3v67GPlGOrvxWjZmBXiBCRU+I8VEiNyJzjth40POfHiz2RB3gImA==", "dev": true, + "license": "MIT", "dependencies": { "css-select": "~1.2.0", "dom-serializer": "~0.1.1", @@ -4856,124 +3931,55 @@ "node": ">= 0.6" } }, - "node_modules/cheerio/node_modules/css-select": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-1.2.0.tgz", - "integrity": "sha1-KzoRBTnFNV8c2NMUYj6HCxIeyFg=", - "dev": true, - "dependencies": { - "boolbase": "~1.0.0", - "css-what": "2.1", - "domutils": "1.5.1", - "nth-check": "~1.0.1" - } - }, - "node_modules/cheerio/node_modules/css-what": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-2.1.3.tgz", - "integrity": "sha512-a+EPoD+uZiNfh+5fxw2nO9QwFa6nJe2Or35fGY6Ipw1R3R4AGz1d1TEZrCegvw2YTmZ0jXirGYlzxxpYSHwpEg==", - "dev": true, - "engines": { - "node": "*" - } - }, - "node_modules/cheerio/node_modules/dom-serializer": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.1.tgz", - "integrity": "sha512-l0IU0pPzLWSHBcieZbpOKgkIn3ts3vAh7ZuFyXNwJxJXk/c4Gwj9xaTJwIDVQCXawWD0qb3IzMGH5rglQaO0XA==", - "dev": true, - "dependencies": { - "domelementtype": "^1.3.0", - "entities": "^1.1.1" - } - }, - "node_modules/cheerio/node_modules/domutils": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz", - "integrity": "sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8=", - "dev": true, - "dependencies": { - "dom-serializer": "0", - "domelementtype": "1" - } - }, - "node_modules/cheerio/node_modules/entities": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz", - "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==", - "dev": true - }, - "node_modules/cheerio/node_modules/parse5": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-3.0.3.tgz", - "integrity": "sha512-rgO9Zg5LLLkfJF9E6CCmXlSE4UVceloys8JrFqCcHloC3usd/kJCyPDwH2SOlzix2j3xaP9sUX3e8+kvkuleAA==", - "dev": true, - "dependencies": { - "@types/node": "*" - } - }, "node_modules/chokidar": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.4.3.tgz", - "integrity": "sha512-DtM3g7juCXQxFVSNPNByEC2+NImtBuxQQvWlHunpJIS5Ocr0lG306cC7FCi7cEA0fzmybPUIl4txBIobk1gGOQ==", + "version": "3.5.2", "dev": true, + "license": "MIT", "dependencies": { - "anymatch": "~3.1.1", + "anymatch": "~3.1.2", "braces": "~3.0.2", - "glob-parent": "~5.1.0", + "glob-parent": "~5.1.2", "is-binary-path": "~2.1.0", "is-glob": "~4.0.1", "normalize-path": "~3.0.0", - "readdirp": "~3.5.0" + "readdirp": "~3.6.0" }, "engines": { "node": ">= 8.10.0" }, "optionalDependencies": { - "fsevents": "~2.1.2" + "fsevents": "~2.3.2" } }, "node_modules/chownr": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", - "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", "dev": true, + "license": "ISC", "engines": { "node": ">=10" } }, "node_modules/chrome-trace-event": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.2.tgz", - "integrity": "sha512-9e/zx1jw7B4CO+c/RXoCsfg/x1AfUBioy4owYH0bJprEYAx5hRFLRhWBqHAG57D0ZM4H7vxbP7bPe0VwhQRYDQ==", + "version": "1.0.3", "dev": true, - "dependencies": { - "tslib": "^1.9.0" - }, + "license": "MIT", "engines": { "node": ">=6.0" } }, - "node_modules/chrome-trace-event/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - }, "node_modules/cipher-base": { "version": "1.0.4", - "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", - "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", + "dev": true, + "license": "MIT", "dependencies": { "inherits": "^2.0.1", "safe-buffer": "^5.0.1" } }, "node_modules/circular-dependency-plugin": { - "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==", + "version": "5.2.2", "dev": true, + "license": "ISC", "engines": { "node": ">=6.0.0" }, @@ -4983,9 +3989,8 @@ }, "node_modules/class-utils": { "version": "0.3.6", - "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", - "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", "dev": true, + "license": "MIT", "dependencies": { "arr-union": "^3.1.0", "define-property": "^0.2.5", @@ -4998,9 +4003,8 @@ }, "node_modules/class-utils/node_modules/define-property": { "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", "dev": true, + "license": "MIT", "dependencies": { "is-descriptor": "^0.1.0" }, @@ -5008,20 +4012,83 @@ "node": ">=0.10.0" } }, + "node_modules/class-utils/node_modules/is-accessor-descriptor": { + "version": "0.1.6", + "dev": true, + "license": "MIT", + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/class-utils/node_modules/is-accessor-descriptor/node_modules/kind-of": { + "version": "3.2.2", + "dev": true, + "license": "MIT", + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/class-utils/node_modules/is-data-descriptor": { + "version": "0.1.4", + "dev": true, + "license": "MIT", + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/class-utils/node_modules/is-data-descriptor/node_modules/kind-of": { + "version": "3.2.2", + "dev": true, + "license": "MIT", + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/class-utils/node_modules/is-descriptor": { + "version": "0.1.6", + "dev": true, + "license": "MIT", + "dependencies": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/class-utils/node_modules/kind-of": { + "version": "5.1.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/clean-stack": { "version": "2.2.0", - "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", - "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } }, "node_modules/cli-cursor": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", - "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", "dev": true, + "license": "MIT", "dependencies": { "restore-cursor": "^3.1.0" }, @@ -5030,10 +4097,9 @@ } }, "node_modules/cli-spinners": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.5.0.tgz", - "integrity": "sha512-PC+AmIuK04E6aeSs/pUccSujsTzBhu4HzC2dL+CfJB/Jcc2qTRbEwZQDfIUpt2Xl8BodYBEq8w4fc0kU2I9DjQ==", + "version": "2.6.0", "dev": true, + "license": "MIT", "engines": { "node": ">=6" }, @@ -5043,28 +4109,34 @@ }, "node_modules/cli-width": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz", - "integrity": "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==", "dev": true, + "license": "ISC", "engines": { "node": ">= 10" } }, "node_modules/cliui": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", - "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", + "version": "7.0.4", + "dev": true, + "license": "ISC", "dependencies": { - "string-width": "^3.1.0", - "strip-ansi": "^5.2.0", - "wrap-ansi": "^5.1.0" + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, + "node_modules/clone": { + "version": "1.0.4", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8" } }, "node_modules/clone-deep": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", - "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", "dev": true, + "license": "MIT", "dependencies": { "is-plain-object": "^2.0.4", "kind-of": "^6.0.2", @@ -5074,34 +4146,18 @@ "node": ">=6" } }, - "node_modules/coa": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/coa/-/coa-2.0.2.tgz", - "integrity": "sha512-q5/jG+YQnSy4nRTV4F7lPepBJZ8qBNJJDBuJdoejDyLXgmL7IEo+Le2JDZudFTFt7mrCqIRaSjws4ygRCTCAXA==", - "dev": true, - "dependencies": { - "@types/q": "^1.5.1", - "chalk": "^2.4.1", - "q": "^1.1.2" - }, - "engines": { - "node": ">= 4.0" - } - }, "node_modules/code-point-at": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", - "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/collection-visit": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", - "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", "dev": true, + "license": "MIT", "dependencies": { "map-visit": "^1.0.0", "object-visit": "^1.0.0" @@ -5110,50 +4166,31 @@ "node": ">=0.10.0" } }, - "node_modules/color": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/color/-/color-3.1.3.tgz", - "integrity": "sha512-xgXAcTHa2HeFCGLE9Xs/R82hujGtu9Jd9x4NW3T34+OMs7VoPsjwzRczKHvTAHeJwWFwX5j15+MgAppE8ztObQ==", - "dev": true, - "dependencies": { - "color-convert": "^1.9.1", - "color-string": "^1.5.4" - } - }, "node_modules/color-convert": { "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "license": "MIT", "dependencies": { "color-name": "1.1.3" } }, "node_modules/color-name": { "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + "license": "MIT" }, - "node_modules/color-string": { - "version": "1.5.4", - "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.5.4.tgz", - "integrity": "sha512-57yF5yt8Xa3czSEW1jfQDE79Idk0+AkN/4KWad6tbdxUmAs3MvjxlWSWD4deYytcRfoZ9nhKyFl1kj5tBvidbw==", + "node_modules/colord": { + "version": "2.1.0", "dev": true, - "dependencies": { - "color-name": "^1.0.0", - "simple-swizzle": "^0.2.2" - } + "license": "MIT" }, "node_modules/colorette": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.2.1.tgz", - "integrity": "sha512-puCDz0CzydiSYOrnXpz/PKd69zRrribezjtE9yd4zvytoRc8+RY/KJPvtPFKZS3E3wP6neGyMe0vOTlHO5L3Pw==", - "dev": true + "version": "1.1.0", + "dev": true, + "license": "MIT" }, "node_modules/combined-stream": { "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", "dev": true, + "license": "MIT", "dependencies": { "delayed-stream": "~1.0.0" }, @@ -5162,42 +4199,31 @@ } }, "node_modules/commander": { - "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==", - "dev": true + "version": "7.2.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 10" + } }, "node_modules/commondir": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", - "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/compare-versions": { "version": "3.6.0", - "resolved": "https://registry.npmjs.org/compare-versions/-/compare-versions-3.6.0.tgz", - "integrity": "sha512-W6Af2Iw1z4CB7q4uU4hv646dW9GQuBM+YpC0UvUCWSD8w90SJjp+ujJuXaEMtAXBtSqGfMPuFOVn4/+FlaqfBA==" + "license": "MIT" }, "node_modules/component-emitter": { "version": "1.3.0", - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", - "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==", - "dev": true - }, - "node_modules/compose-function": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/compose-function/-/compose-function-3.0.3.tgz", - "integrity": "sha1-ntZ18TzFRQHTCVCkhv9qe6OrGF8=", "dev": true, - "dependencies": { - "arity-n": "^1.0.4" - } + "license": "MIT" }, "node_modules/compressible": { "version": "2.0.18", - "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", - "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", "dev": true, + "license": "MIT", "dependencies": { "mime-db": ">= 1.43.0 < 2" }, @@ -5207,9 +4233,8 @@ }, "node_modules/compression": { "version": "1.7.4", - "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz", - "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==", "dev": true, + "license": "MIT", "dependencies": { "accepts": "~1.3.5", "bytes": "3.0.0", @@ -5223,41 +4248,39 @@ "node": ">= 0.8.0" } }, + "node_modules/compression/node_modules/bytes": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, "node_modules/compression/node_modules/debug": { "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dev": true, + "license": "MIT", "dependencies": { "ms": "2.0.0" } }, "node_modules/compression/node_modules/ms": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - }, - "node_modules/compression/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/concat-map": { "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/concat-stream": { "version": "1.6.2", - "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", - "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", "dev": true, "engines": [ "node >= 0.8" ], + "license": "MIT", "dependencies": { "buffer-from": "^1.0.0", "inherits": "^2.0.3", @@ -5267,15 +4290,13 @@ }, "node_modules/concat-stream/node_modules/isarray": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/concat-stream/node_modules/readable-stream": { "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", "dev": true, + "license": "MIT", "dependencies": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", @@ -5286,53 +4307,40 @@ "util-deprecate": "~1.0.1" } }, - "node_modules/concat-stream/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, "node_modules/concat-stream/node_modules/string_decoder": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "dev": true, + "license": "MIT", "dependencies": { "safe-buffer": "~5.1.0" } }, "node_modules/connect-history-api-fallback": { "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==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.8" } }, "node_modules/console-browserify": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.2.0.tgz", - "integrity": "sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA==", "dev": true }, "node_modules/console-control-strings": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", - "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/constants-browserify": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz", - "integrity": "sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U=", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/content-disposition": { "version": "0.5.3", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz", - "integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==", "dev": true, + "license": "MIT", "dependencies": { "safe-buffer": "5.1.2" }, @@ -5340,56 +4348,47 @@ "node": ">= 0.6" } }, - "node_modules/content-disposition/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, "node_modules/content-type": { "version": "1.0.4", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", - "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.6" } }, "node_modules/convert-source-map": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.7.0.tgz", - "integrity": "sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA==", + "version": "1.8.0", "dev": true, + "license": "MIT", "dependencies": { "safe-buffer": "~5.1.1" } }, - "node_modules/convert-source-map/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, "node_modules/cookie": { "version": "0.4.0", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz", - "integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.6" } }, "node_modules/cookie-signature": { "version": "1.0.6", - "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", - "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=", - "dev": true + "dev": true, + "license": "MIT" + }, + "node_modules/copy-anything": { + "version": "2.0.3", + "dev": true, + "license": "MIT", + "dependencies": { + "is-what": "^3.12.0" + } }, "node_modules/copy-concurrently": { "version": "1.0.5", - "resolved": "https://registry.npmjs.org/copy-concurrently/-/copy-concurrently-1.0.5.tgz", - "integrity": "sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A==", "dev": true, + "license": "ISC", "dependencies": { "aproba": "^1.1.1", "fs-write-stream-atomic": "^1.0.8", @@ -5399,11 +4398,21 @@ "run-queue": "^1.0.0" } }, + "node_modules/copy-concurrently/node_modules/mkdirp": { + "version": "0.5.5", + "dev": true, + "license": "MIT", + "dependencies": { + "minimist": "^1.2.5" + }, + "bin": { + "mkdirp": "bin/cmd.js" + } + }, "node_modules/copy-concurrently/node_modules/rimraf": { "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", "dev": true, + "license": "ISC", "dependencies": { "glob": "^7.1.3" }, @@ -5413,18 +4422,16 @@ }, "node_modules/copy-descriptor": { "version": "0.1.1", - "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", - "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/copy-webpack-plugin": { - "version": "6.4.1", - "resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-6.4.1.tgz", - "integrity": "sha512-MXyPCjdPVx5iiWyl40Va3JGh27bKzOTNY3NjUTrosD2q7dR/cLD0013uqJ3BpFbUjyONINjb6qI7nDIJujrMbA==", + "version": "6.3.2", "dev": true, + "license": "MIT", "dependencies": { "cacache": "^15.0.5", "fast-glob": "^3.2.4", @@ -5449,28 +4456,12 @@ "webpack": "^4.37.0 || ^5.0.0" } }, - "node_modules/copy-webpack-plugin/node_modules/p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dev": true, - "dependencies": { - "yocto-queue": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/copy-webpack-plugin/node_modules/schema-utils": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.0.0.tgz", - "integrity": "sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA==", + "version": "3.1.0", "dev": true, + "license": "MIT", "dependencies": { - "@types/json-schema": "^7.0.6", + "@types/json-schema": "^7.0.7", "ajv": "^6.12.5", "ajv-keywords": "^3.5.2" }, @@ -5482,32 +4473,38 @@ "url": "https://opencollective.com/webpack" } }, - "node_modules/copy-webpack-plugin/node_modules/serialize-javascript": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-5.0.1.tgz", - "integrity": "sha512-SaaNal9imEO737H2c05Og0/8LUXG7EnsZyMa8MzkmuHoELfT6txuj0cMqRj6zfPKnmQ1yasR4PCJc8x+M4JSPA==", + "node_modules/copy-webpack-plugin/node_modules/source-map": { + "version": "0.6.1", "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/copy-webpack-plugin/node_modules/webpack-sources": { + "version": "1.4.3", + "dev": true, + "license": "MIT", "dependencies": { - "randombytes": "^2.1.0" + "source-list-map": "^2.0.0", + "source-map": "~0.6.1" } }, "node_modules/core-js": { - "version": "3.8.0", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.8.0.tgz", - "integrity": "sha512-W2VYNB0nwQQE7tKS7HzXd7r2y/y2SVJl4ga6oH/dnaLFzM0o2lB2P3zCkWj5Wc/zyMYjtgd5Hmhk0ObkQFZOIA==", + "version": "3.15.2", "hasInstallScript": true, + "license": "MIT", "funding": { "type": "opencollective", "url": "https://opencollective.com/core-js" } }, "node_modules/core-js-compat": { - "version": "3.8.0", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.8.0.tgz", - "integrity": "sha512-o9QKelQSxQMYWHXc/Gc4L8bx/4F7TTraE5rhuN8I7mKBt5dBIUpXpIR3omv70ebr8ST5R3PqbDQr+ZI3+Tt1FQ==", + "version": "3.15.2", "dev": true, + "license": "MIT", "dependencies": { - "browserslist": "^4.14.7", + "browserslist": "^4.16.6", "semver": "7.0.0" }, "funding": { @@ -5517,48 +4514,50 @@ }, "node_modules/core-js-compat/node_modules/semver": { "version": "7.0.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz", - "integrity": "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==", "dev": true, + "license": "ISC", "bin": { "semver": "bin/semver.js" } }, "node_modules/core-util-is": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/cosmiconfig": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-5.2.1.tgz", - "integrity": "sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA==", + "version": "7.0.0", "dev": true, + "license": "MIT", "dependencies": { - "import-fresh": "^2.0.0", - "is-directory": "^0.3.1", - "js-yaml": "^3.13.1", - "parse-json": "^4.0.0" + "@types/parse-json": "^4.0.0", + "import-fresh": "^3.2.1", + "parse-json": "^5.0.0", + "path-type": "^4.0.0", + "yaml": "^1.10.0" }, "engines": { - "node": ">=4" + "node": ">=10" } }, "node_modules/create-ecdh": { "version": "4.0.4", - "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.4.tgz", - "integrity": "sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A==", "dev": true, + "license": "MIT", "dependencies": { "bn.js": "^4.1.0", "elliptic": "^6.5.3" } }, + "node_modules/create-ecdh/node_modules/bn.js": { + "version": "4.12.0", + "dev": true, + "license": "MIT" + }, "node_modules/create-hash": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", - "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", + "dev": true, + "license": "MIT", "dependencies": { "cipher-base": "^1.0.1", "inherits": "^2.0.1", @@ -5569,8 +4568,8 @@ }, "node_modules/create-hmac": { "version": "1.1.7", - "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", - "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", + "dev": true, + "license": "MIT", "dependencies": { "cipher-base": "^1.0.3", "create-hash": "^1.1.0", @@ -5582,40 +4581,107 @@ }, "node_modules/create-require": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", - "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", - "dev": true - }, - "node_modules/cross-spawn": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", - "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", "dev": true, + "license": "MIT" + }, + "node_modules/critters": { + "version": "0.0.7", + "dev": true, + "license": "Apache-2.0", "dependencies": { - "nice-try": "^1.0.4", - "path-key": "^2.0.1", - "semver": "^5.5.0", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - }, - "engines": { - "node": ">=4.8" + "chalk": "^4.1.0", + "css": "^3.0.0", + "parse5": "^6.0.1", + "parse5-htmlparser2-tree-adapter": "^6.0.1", + "pretty-bytes": "^5.3.0" } }, - "node_modules/cross-spawn/node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "node_modules/critters/node_modules/ansi-styles": { + "version": "4.3.0", "dev": true, - "bin": { - "semver": "bin/semver" + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/critters/node_modules/chalk": { + "version": "4.1.1", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/critters/node_modules/color-convert": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/critters/node_modules/color-name": { + "version": "1.1.4", + "dev": true, + "license": "MIT" + }, + "node_modules/critters/node_modules/has-flag": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/critters/node_modules/parse5": { + "version": "6.0.1", + "dev": true, + "license": "MIT" + }, + "node_modules/critters/node_modules/supports-color": { + "version": "7.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cross-spawn": { + "version": "7.0.3", + "dev": true, + "license": "MIT", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" } }, "node_modules/crypto-browserify": { "version": "3.12.0", - "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz", - "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==", "dev": true, + "license": "MIT", "dependencies": { "browserify-cipher": "^1.0.0", "browserify-sign": "^4.0.0", @@ -5634,56 +4700,53 @@ } }, "node_modules/css": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/css/-/css-2.2.4.tgz", - "integrity": "sha512-oUnjmWpy0niI3x/mPL8dVEI1l7MnG3+HHyRPHf+YFSbK+svOhXpmSOcDURUh2aOCgl2grzrOPt1nHLuCVFULLw==", + "version": "3.0.0", "dev": true, + "license": "MIT", "dependencies": { - "inherits": "^2.0.3", + "inherits": "^2.0.4", "source-map": "^0.6.1", - "source-map-resolve": "^0.5.2", - "urix": "^0.1.0" + "source-map-resolve": "^0.6.0" } }, "node_modules/css-color-names": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/css-color-names/-/css-color-names-0.0.4.tgz", - "integrity": "sha1-gIrcLnnPhHOAabZGyyDsJ762KeA=", + "version": "1.0.1", "dev": true, + "license": "MIT", "engines": { "node": "*" } }, "node_modules/css-declaration-sorter": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-4.0.1.tgz", - "integrity": "sha512-BcxQSKTSEEQUftYpBVnsH4SF05NTuBokb19/sBt6asXGKZ/6VP7PLG1CBCkFDYOnhXhPh0jMhO6xZ71oYHXHBA==", + "version": "6.0.3", "dev": true, + "license": "ISC", "dependencies": { - "postcss": "^7.0.1", "timsort": "^0.3.0" }, "engines": { - "node": ">4" + "node": ">= 10" + }, + "peerDependencies": { + "postcss": "^8.0.9" } }, "node_modules/css-loader": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-4.3.0.tgz", - "integrity": "sha512-rdezjCjScIrsL8BSYszgT4s476IcNKt6yX69t0pHjJVnPUTDpn4WfIpDQTN3wCJvUvfsz/mFjuGOekf3PY3NUg==", + "version": "5.0.1", "dev": true, + "license": "MIT", "dependencies": { - "camelcase": "^6.0.0", + "camelcase": "^6.2.0", "cssesc": "^3.0.0", - "icss-utils": "^4.1.1", + "icss-utils": "^5.0.0", "loader-utils": "^2.0.0", - "postcss": "^7.0.32", - "postcss-modules-extract-imports": "^2.0.0", - "postcss-modules-local-by-default": "^3.0.3", - "postcss-modules-scope": "^2.2.0", - "postcss-modules-values": "^3.0.0", + "postcss": "^8.1.4", + "postcss-modules-extract-imports": "^3.0.0", + "postcss-modules-local-by-default": "^4.0.0", + "postcss-modules-scope": "^3.0.0", + "postcss-modules-values": "^4.0.0", "postcss-value-parser": "^4.1.0", - "schema-utils": "^2.7.1", + "schema-utils": "^3.0.0", "semver": "^7.3.2" }, "engines": { @@ -5697,194 +4760,77 @@ "webpack": "^4.27.0 || ^5.0.0" } }, - "node_modules/css-loader/node_modules/camelcase": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.2.0.tgz", - "integrity": "sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg==", + "node_modules/css-loader/node_modules/schema-utils": { + "version": "3.1.0", "dev": true, + "license": "MIT", + "dependencies": { + "@types/json-schema": "^7.0.7", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + }, "engines": { - "node": ">=10" + "node": ">= 10.13.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "type": "opencollective", + "url": "https://opencollective.com/webpack" } }, "node_modules/css-parse": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/css-parse/-/css-parse-2.0.0.tgz", - "integrity": "sha1-pGjuZnwW2BzPBcWMONKpfHgNv9Q=", "dev": true, + "license": "MIT", "dependencies": { "css": "^2.0.0" } }, - "node_modules/css-select": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-2.1.0.tgz", - "integrity": "sha512-Dqk7LQKpwLoH3VovzZnkzegqNSuAziQyNZUcrdDM401iY+R5NkGBXGmtO05/yaXQziALuPogeG0b7UAgjnTJTQ==", + "node_modules/css-parse/node_modules/css": { + "version": "2.2.4", "dev": true, + "license": "MIT", "dependencies": { - "boolbase": "^1.0.0", - "css-what": "^3.2.1", - "domutils": "^1.7.0", - "nth-check": "^1.0.2" + "inherits": "^2.0.3", + "source-map": "^0.6.1", + "source-map-resolve": "^0.5.2", + "urix": "^0.1.0" } }, - "node_modules/css-select-base-adapter": { - "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==", - "dev": true + "node_modules/css-parse/node_modules/source-map": { + "version": "0.6.1", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/css-parse/node_modules/source-map-resolve": { + "version": "0.5.3", + "dev": true, + "license": "MIT", + "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" + } + }, + "node_modules/css-select": { + "version": "1.2.0", + "dev": true, + "license": "BSD-like", + "dependencies": { + "boolbase": "~1.0.0", + "css-what": "2.1", + "domutils": "1.5.1", + "nth-check": "~1.0.1" + } }, "node_modules/css-tree": { - "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==", - "dev": true, - "dependencies": { - "mdn-data": "2.0.4", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/css-what": { - "version": "3.4.2", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-3.4.2.tgz", - "integrity": "sha512-ACUm3L0/jiZTqfzRM3Hi9Q8eZqd6IK37mMWPLz9PJxkLWllYeRf+EHUSHYEtFop2Eqytaq1FizFVh7XfBnXCDQ==", - "dev": true, - "engines": { - "node": ">= 6" - }, - "funding": { - "url": "https://github.com/sponsors/fb55" - } - }, - "node_modules/cssesc": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", - "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", - "dev": true, - "bin": { - "cssesc": "bin/cssesc" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/cssnano": { - "version": "4.1.10", - "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-4.1.10.tgz", - "integrity": "sha512-5wny+F6H4/8RgNlaqab4ktc3e0/blKutmq8yNlBFXA//nSFFAqAngjNVRzUvCgYROULmZZUoosL/KSoZo5aUaQ==", - "dev": true, - "dependencies": { - "cosmiconfig": "^5.0.0", - "cssnano-preset-default": "^4.0.7", - "is-resolvable": "^1.0.0", - "postcss": "^7.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/cssnano-preset-default": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-4.0.7.tgz", - "integrity": "sha512-x0YHHx2h6p0fCl1zY9L9roD7rnlltugGu7zXSKQx6k2rYw0Hi3IqxcoAGF7u9Q5w1nt7vK0ulxV8Lo+EvllGsA==", - "dev": true, - "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.2", - "postcss-unique-selectors": "^4.0.1" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/cssnano-util-get-arguments": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/cssnano-util-get-arguments/-/cssnano-util-get-arguments-4.0.0.tgz", - "integrity": "sha1-7ToIKZ8h11dBsg87gfGU7UnMFQ8=", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/cssnano-util-get-match": { - "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=", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/cssnano-util-raw-cache": { - "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==", - "dev": true, - "dependencies": { - "postcss": "^7.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/cssnano-util-same-parent": { - "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==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/csso": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/csso/-/csso-4.2.0.tgz", - "integrity": "sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA==", - "dev": true, - "dependencies": { - "css-tree": "^1.1.2" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/csso/node_modules/css-tree": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.1.2.tgz", - "integrity": "sha512-wCoWush5Aeo48GLhfHPbmvZs59Z+M7k5+B1xDnXbdWNcEF423DoFdqSWE0PM5aNk5nI5cp1q7ms36zGApY/sKQ==", + "version": "1.1.3", "dev": true, + "license": "MIT", "dependencies": { "mdn-data": "2.0.14", "source-map": "^0.6.1" @@ -5893,33 +4839,134 @@ "node": ">=8.0.0" } }, - "node_modules/csso/node_modules/mdn-data": { - "version": "2.0.14", - "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz", - "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==", - "dev": true + "node_modules/css-tree/node_modules/source-map": { + "version": "0.6.1", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/css-what": { + "version": "2.1.3", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": "*" + } + }, + "node_modules/css/node_modules/source-map": { + "version": "0.6.1", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/cssesc": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "bin": { + "cssesc": "bin/cssesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/cssnano": { + "version": "5.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "cosmiconfig": "^7.0.0", + "cssnano-preset-default": "^5.0.1", + "is-resolvable": "^1.1.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/cssnano" + }, + "peerDependencies": { + "postcss": "^8.2.1" + } + }, + "node_modules/cssnano-preset-default": { + "version": "5.1.3", + "dev": true, + "license": "MIT", + "dependencies": { + "css-declaration-sorter": "^6.0.3", + "cssnano-utils": "^2.0.1", + "postcss-calc": "^8.0.0", + "postcss-colormin": "^5.2.0", + "postcss-convert-values": "^5.0.1", + "postcss-discard-comments": "^5.0.1", + "postcss-discard-duplicates": "^5.0.1", + "postcss-discard-empty": "^5.0.1", + "postcss-discard-overridden": "^5.0.1", + "postcss-merge-longhand": "^5.0.2", + "postcss-merge-rules": "^5.0.2", + "postcss-minify-font-values": "^5.0.1", + "postcss-minify-gradients": "^5.0.1", + "postcss-minify-params": "^5.0.1", + "postcss-minify-selectors": "^5.1.0", + "postcss-normalize-charset": "^5.0.1", + "postcss-normalize-display-values": "^5.0.1", + "postcss-normalize-positions": "^5.0.1", + "postcss-normalize-repeat-style": "^5.0.1", + "postcss-normalize-string": "^5.0.1", + "postcss-normalize-timing-functions": "^5.0.1", + "postcss-normalize-unicode": "^5.0.1", + "postcss-normalize-url": "^5.0.2", + "postcss-normalize-whitespace": "^5.0.1", + "postcss-ordered-values": "^5.0.2", + "postcss-reduce-initial": "^5.0.1", + "postcss-reduce-transforms": "^5.0.1", + "postcss-svgo": "^5.0.2", + "postcss-unique-selectors": "^5.0.1" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/cssnano-utils": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/csso": { + "version": "4.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "css-tree": "^1.1.2" + }, + "engines": { + "node": ">=8.0.0" + } }, "node_modules/cyclist": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/cyclist/-/cyclist-1.0.1.tgz", - "integrity": "sha1-WW6WmP0MgOEgOMK4LW6xs1tiJNk=", - "dev": true - }, - "node_modules/d": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz", - "integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==", "dev": true, - "dependencies": { - "es5-ext": "^0.10.50", - "type": "^1.0.1" - } + "license": "MIT" }, "node_modules/dashdash": { "version": "1.14.1", - "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", - "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", "dev": true, + "license": "MIT", "dependencies": { "assert-plus": "^1.0.0" }, @@ -5929,9 +4976,8 @@ }, "node_modules/debug": { "version": "4.3.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", - "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", "dev": true, + "license": "MIT", "dependencies": { "ms": "2.1.2" }, @@ -5946,26 +4992,23 @@ }, "node_modules/decamelize": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", + "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/decode-uri-component": { "version": "0.2.0", - "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", - "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10" } }, "node_modules/deep-equal": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.1.1.tgz", - "integrity": "sha512-yd9c5AdiqVcR+JjcwUQb9DkhJc8ngNr0MahEBGvDiJw8puWab2yZlh+nkasOnZP+EGTAP6rRp2JzJhJZzvNF8g==", "dev": true, + "license": "MIT", "dependencies": { "is-arguments": "^1.0.4", "is-date-object": "^1.0.1", @@ -5980,9 +5023,8 @@ }, "node_modules/default-gateway": { "version": "4.2.0", - "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-4.2.0.tgz", - "integrity": "sha512-h6sMrVB1VMWVrW13mSc6ia/DwYYw5MN6+exNu1OaJeFac5aSAvwM7lZ0NVfTABuSkQelr4h5oebg3KB1XPdjgA==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "execa": "^1.0.0", "ip-regex": "^2.1.0" @@ -5993,27 +5035,16 @@ }, "node_modules/defaults": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz", - "integrity": "sha1-xlYFHpgX2f8I7YgUd/P+QBnz730=", "dev": true, + "license": "MIT", "dependencies": { "clone": "^1.0.2" } }, - "node_modules/defaults/node_modules/clone": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", - "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4=", - "dev": true, - "engines": { - "node": ">=0.8" - } - }, "node_modules/define-properties": { "version": "1.1.3", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", - "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", "dev": true, + "license": "MIT", "dependencies": { "object-keys": "^1.0.12" }, @@ -6023,9 +5054,8 @@ }, "node_modules/define-property": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", - "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", "dev": true, + "license": "MIT", "dependencies": { "is-descriptor": "^1.0.2", "isobject": "^3.0.1" @@ -6034,49 +5064,10 @@ "node": ">=0.10.0" } }, - "node_modules/define-property/node_modules/is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "dependencies": { - "kind-of": "^6.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/define-property/node_modules/is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "dependencies": { - "kind-of": "^6.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/define-property/node_modules/is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "dependencies": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/del": { "version": "4.1.1", - "resolved": "https://registry.npmjs.org/del/-/del-4.1.1.tgz", - "integrity": "sha512-QwGuEUouP2kVwQenAsOof5Fv8K9t3D8Ca8NxcXKrIpEHjTXK5J2nXLdP+ALI1cgv8wj7KuwBhTwBkOZSJKM5XQ==", "dev": true, + "license": "MIT", "dependencies": { "@types/glob": "^7.1.1", "globby": "^6.1.0", @@ -6092,9 +5083,8 @@ }, "node_modules/del/node_modules/array-union": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", - "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=", "dev": true, + "license": "MIT", "dependencies": { "array-uniq": "^1.0.1" }, @@ -6104,9 +5094,8 @@ }, "node_modules/del/node_modules/globby": { "version": "6.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz", - "integrity": "sha1-9abXDoOV4hyFj7BInWTfAkJNUGw=", "dev": true, + "license": "MIT", "dependencies": { "array-union": "^1.0.1", "glob": "^7.0.3", @@ -6120,27 +5109,32 @@ }, "node_modules/del/node_modules/globby/node_modules/pify": { "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/del/node_modules/p-map": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-2.1.0.tgz", - "integrity": "sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==", "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/del/node_modules/pify": { + "version": "4.0.1", + "dev": true, + "license": "MIT", "engines": { "node": ">=6" } }, "node_modules/del/node_modules/rimraf": { "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", "dev": true, + "license": "ISC", "dependencies": { "glob": "^7.1.3" }, @@ -6150,42 +5144,37 @@ }, "node_modules/delayed-stream": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", "dev": true, + "license": "MIT", "engines": { "node": ">=0.4.0" } }, "node_modules/delegates": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", - "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/depd": { "version": "1.1.2", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.6" } }, "node_modules/dependency-graph": { "version": "0.7.2", - "resolved": "https://registry.npmjs.org/dependency-graph/-/dependency-graph-0.7.2.tgz", - "integrity": "sha512-KqtH4/EZdtdfWX0p6MGP9jljvxSY6msy/pRUD4jgNwVpv3v1QmNLlsB3LDSSUg79BRVSn7jI1QPRtArGABovAQ==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.6.0" } }, "node_modules/des.js": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.1.tgz", - "integrity": "sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA==", "dev": true, + "license": "MIT", "dependencies": { "inherits": "^2.0.1", "minimalistic-assert": "^1.0.0" @@ -6193,46 +5182,45 @@ }, "node_modules/destroy": { "version": "1.0.4", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", - "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/detect-node": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.0.4.tgz", - "integrity": "sha512-ZIzRpLJrOj7jjP2miAtgqIfmzbxa4ZOr5jJc601zklsfEx9oTzmmj2nVpIPRpNlRTIh8lc1kyViIY7BWSGNmKw==", - "dev": true + "version": "2.1.0", + "dev": true, + "license": "MIT" }, "node_modules/diff": { "version": "4.0.2", - "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", - "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", "dev": true, + "license": "BSD-3-Clause", "engines": { "node": ">=0.3.1" } }, "node_modules/diffie-hellman": { "version": "5.0.3", - "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", - "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==", "dev": true, + "license": "MIT", "dependencies": { "bn.js": "^4.1.0", "miller-rabin": "^4.0.0", "randombytes": "^2.0.0" } }, + "node_modules/diffie-hellman/node_modules/bn.js": { + "version": "4.12.0", + "dev": true, + "license": "MIT" + }, "node_modules/dijkstrajs": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/dijkstrajs/-/dijkstrajs-1.0.1.tgz", - "integrity": "sha1-082BIh4+pAdCz83lVtTpnpjdxxs=" + "version": "1.0.2", + "license": "MIT" }, "node_modules/dir-glob": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", "dev": true, + "license": "MIT", "dependencies": { "path-type": "^4.0.0" }, @@ -6242,15 +5230,13 @@ }, "node_modules/dns-equal": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/dns-equal/-/dns-equal-1.0.0.tgz", - "integrity": "sha1-s55/HabrCnW6nBcySzR1PEfgZU0=", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/dns-packet": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-1.3.1.tgz", - "integrity": "sha512-0UxfQkMhYAUaZI+xrNZOz/as5KgDU0M/fQ9b6SpkyLbk3GEswDi6PADJVaYJradtRVsRIlF1zLyOodbcTCDzUg==", + "version": "1.3.4", "dev": true, + "license": "MIT", "dependencies": { "ip": "^1.1.0", "safe-buffer": "^5.0.1" @@ -6258,40 +5244,25 @@ }, "node_modules/dns-txt": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/dns-txt/-/dns-txt-2.0.2.tgz", - "integrity": "sha1-uR2Ab10nGI5Ks+fRB9iBocxGQrY=", "dev": true, + "license": "MIT", "dependencies": { "buffer-indexof": "^1.0.0" } }, "node_modules/dom-serializer": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.2.2.tgz", - "integrity": "sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g==", + "version": "0.1.1", "dev": true, + "license": "MIT", "dependencies": { - "domelementtype": "^2.0.1", - "entities": "^2.0.0" + "domelementtype": "^1.3.0", + "entities": "^1.1.1" } }, - "node_modules/dom-serializer/node_modules/domelementtype": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.0.2.tgz", - "integrity": "sha512-wFwTwCVebUrMgGeAwRL/NhZtHAUyT9n9yg4IMDwf10+6iCMxSkVq9MGCVEH+QZWo1nNidy8kNvwmv4zWHDTqvA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/fb55" - } - ] - }, "node_modules/domain-browser": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz", - "integrity": "sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.4", "npm": ">=1.2" @@ -6299,46 +5270,29 @@ }, "node_modules/domelementtype": { "version": "1.3.1", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz", - "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==", - "dev": true + "dev": true, + "license": "BSD-2-Clause" }, "node_modules/domhandler": { "version": "2.4.2", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.4.2.tgz", - "integrity": "sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "domelementtype": "1" } }, "node_modules/domutils": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.7.0.tgz", - "integrity": "sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==", + "version": "1.5.1", "dev": true, "dependencies": { "dom-serializer": "0", "domelementtype": "1" } }, - "node_modules/dot-prop": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz", - "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==", - "dev": true, - "dependencies": { - "is-obj": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/duplexify": { "version": "3.7.1", - "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.7.1.tgz", - "integrity": "sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==", "dev": true, + "license": "MIT", "dependencies": { "end-of-stream": "^1.0.0", "inherits": "^2.0.1", @@ -6348,15 +5302,13 @@ }, "node_modules/duplexify/node_modules/isarray": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/duplexify/node_modules/readable-stream": { "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", "dev": true, + "license": "MIT", "dependencies": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", @@ -6367,55 +5319,37 @@ "util-deprecate": "~1.0.1" } }, - "node_modules/duplexify/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, "node_modules/duplexify/node_modules/string_decoder": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "dev": true, + "license": "MIT", "dependencies": { "safe-buffer": "~5.1.0" } }, "node_modules/ecc-jsbn": { "version": "0.1.2", - "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", - "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", "dev": true, + "license": "MIT", "dependencies": { "jsbn": "~0.1.0", "safer-buffer": "^2.1.0" } }, - "node_modules/ecdsa-sig-formatter": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", - "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==", - "dependencies": { - "safe-buffer": "^5.0.1" - } - }, "node_modules/ee-first": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/electron-to-chromium": { - "version": "1.3.614", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.614.tgz", - "integrity": "sha512-JMDl46mg4G+n6q/hAJkwy9eMTj5FJjsE+8f/irAGRMLM4yeRVbMuRrdZrbbGGOrGVcZc4vJPjUpEUWNb/fA6hg==", - "dev": true + "version": "1.3.774", + "dev": true, + "license": "ISC" }, "node_modules/elliptic": { "version": "6.5.4", - "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz", - "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==", + "dev": true, + "license": "MIT", "dependencies": { "bn.js": "^4.11.9", "brorand": "^1.1.0", @@ -6426,44 +5360,45 @@ "minimalistic-crypto-utils": "^1.0.1" } }, + "node_modules/elliptic/node_modules/bn.js": { + "version": "4.12.0", + "dev": true, + "license": "MIT" + }, "node_modules/emoji-regex": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", - "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==" + "version": "8.0.0", + "dev": true, + "license": "MIT" }, "node_modules/emojis-list": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", - "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", "dev": true, + "license": "MIT", "engines": { "node": ">= 4" } }, "node_modules/encodeurl": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.8" } }, "node_modules/encoding": { "version": "0.1.13", - "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz", - "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==", "dev": true, + "license": "MIT", "optional": true, "dependencies": { "iconv-lite": "^0.6.2" } }, "node_modules/encoding/node_modules/iconv-lite": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.2.tgz", - "integrity": "sha512-2y91h5OpQlolefMPmUlivelittSWy0rP+oYVpn6A7GwVHNE8AWzoYOBNmlwks3LobaJxgHCYZAnyNo2GgpNRNQ==", + "version": "0.6.3", "dev": true, + "license": "MIT", "optional": true, "dependencies": { "safer-buffer": ">= 2.1.2 < 3.0.0" @@ -6474,55 +5409,46 @@ }, "node_modules/end-of-stream": { "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==", "dev": true, + "license": "MIT", "dependencies": { "once": "^1.4.0" } }, "node_modules/enhanced-resolve": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.3.1.tgz", - "integrity": "sha512-G1XD3MRGrGfNcf6Hg0LVZG7GIKcYkbfHa5QMxt1HDUTdYoXH0JR1xXyg+MaKLF73E9A27uWNVxvFivNRYeUB6w==", + "version": "5.7.0", "dev": true, + "license": "MIT", "dependencies": { "graceful-fs": "^4.2.4", - "tapable": "^2.0.0" + "tapable": "^2.2.0" }, "engines": { "node": ">=10.13.0" } }, "node_modules/entities": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-2.1.0.tgz", - "integrity": "sha512-hCx1oky9PFrJ611mf0ifBLBRW8lUUVRlFolb5gWRfIELabBlbp9xZvrqZLZAs+NxFnbfQoeGd8wDkygjg7U85w==", + "version": "1.1.2", "dev": true, - "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" - } + "license": "BSD-2-Clause" }, "node_modules/env-paths": { "version": "2.2.1", - "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", - "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } }, "node_modules/err-code": { "version": "1.1.2", - "resolved": "https://registry.npmjs.org/err-code/-/err-code-1.1.2.tgz", - "integrity": "sha1-BuARbTAo9q70gGhJ6w6mp0iuaWA=", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/errno": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.7.tgz", - "integrity": "sha512-MfrRBDWzIWifgq6tJj60gkAwtLNb6sQPlcFrSOflcP1aFmmruKQ2wRnze/8V6kgyz7H3FF8Npzv78mZ7XLLflg==", + "version": "0.1.8", "dev": true, + "license": "MIT", "dependencies": { "prr": "~1.0.1" }, @@ -6532,117 +5458,37 @@ }, "node_modules/error-ex": { "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", "dev": true, + "license": "MIT", "dependencies": { "is-arrayish": "^0.2.1" } }, - "node_modules/es-abstract": { - "version": "1.18.0-next.1", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.0-next.1.tgz", - "integrity": "sha512-I4UGspA0wpZXWENrdA0uHbnhte683t3qT/1VFH9aX2dA5PPSf6QW5HHXf5HImaqPmjXaVeVk4RGWnaylmV7uAA==", - "dev": true, - "dependencies": { - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.1", - "is-callable": "^1.2.2", - "is-negative-zero": "^2.0.0", - "is-regex": "^1.1.1", - "object-inspect": "^1.8.0", - "object-keys": "^1.1.1", - "object.assign": "^4.1.1", - "string.prototype.trimend": "^1.0.1", - "string.prototype.trimstart": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/es-to-primitive": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", - "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", - "dev": true, - "dependencies": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/es5-ext": { - "version": "0.10.53", - "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.53.tgz", - "integrity": "sha512-Xs2Stw6NiNHWypzRTY1MtaG/uJlwCk8kH81920ma8mvN8Xq1gsfhZvpkImLQArw8AHnv8MT2I45J3c0R8slE+Q==", - "dev": true, - "dependencies": { - "es6-iterator": "~2.0.3", - "es6-symbol": "~3.1.3", - "next-tick": "~1.0.0" - } - }, - "node_modules/es6-iterator": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", - "integrity": "sha1-p96IkUGgWpSwhUQDstCg+/qY87c=", - "dev": true, - "dependencies": { - "d": "1", - "es5-ext": "^0.10.35", - "es6-symbol": "^3.1.1" - } - }, - "node_modules/es6-symbol": { - "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==", - "dev": true, - "dependencies": { - "d": "^1.0.1", - "ext": "^1.1.2" - } - }, "node_modules/escalade": { "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } }, "node_modules/escape-html": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/escape-string-regexp": { "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", "dev": true, + "license": "MIT", "engines": { "node": ">=0.8.0" } }, "node_modules/eslint-scope": { "version": "4.0.3", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.3.tgz", - "integrity": "sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "esrecurse": "^4.1.0", "estraverse": "^4.1.1" @@ -6653,9 +5499,8 @@ }, "node_modules/esprima": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", "dev": true, + "license": "BSD-2-Clause", "bin": { "esparse": "bin/esparse.js", "esvalidate": "bin/esvalidate.js" @@ -6666,9 +5511,8 @@ }, "node_modules/esrecurse": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "estraverse": "^5.2.0" }, @@ -6678,60 +5522,53 @@ }, "node_modules/esrecurse/node_modules/estraverse": { "version": "5.2.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", - "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", "dev": true, + "license": "BSD-2-Clause", "engines": { "node": ">=4.0" } }, "node_modules/estraverse": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", "dev": true, + "license": "BSD-2-Clause", "engines": { "node": ">=4.0" } }, "node_modules/esutils": { "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", "dev": true, + "license": "BSD-2-Clause", "engines": { "node": ">=0.10.0" } }, "node_modules/etag": { "version": "1.8.1", - "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.6" } }, "node_modules/eventemitter3": { "version": "4.0.7", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", - "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/events": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/events/-/events-3.2.0.tgz", - "integrity": "sha512-/46HWwbfCX2xTawVfkKLGxMifJYQBWMwY1mjywRtb4c9x8l5NP3KoJtnIOiL1hfdRkIuYhETxQlo62IF8tcnlg==", + "version": "3.3.0", "dev": true, + "license": "MIT", "engines": { "node": ">=0.8.x" } }, "node_modules/eventsource": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/eventsource/-/eventsource-1.0.7.tgz", - "integrity": "sha512-4Ln17+vVT0k8aWq+t/bF5arcS3EpT9gYtW66EPacdj/mAFevznsnyoHLPy2BA8gbIQeIHoPsvwmfBftfcG//BQ==", + "version": "1.1.0", "dev": true, + "license": "MIT", "dependencies": { "original": "^1.0.0" }, @@ -6741,9 +5578,8 @@ }, "node_modules/evp_bytestokey": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", - "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", "dev": true, + "license": "MIT", "dependencies": { "md5.js": "^1.3.4", "safe-buffer": "^5.1.1" @@ -6751,9 +5587,8 @@ }, "node_modules/execa": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", - "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", "dev": true, + "license": "MIT", "dependencies": { "cross-spawn": "^6.0.0", "get-stream": "^4.0.0", @@ -6767,11 +5602,71 @@ "node": ">=6" } }, + "node_modules/execa/node_modules/cross-spawn": { + "version": "6.0.5", + "dev": true, + "license": "MIT", + "dependencies": { + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + }, + "engines": { + "node": ">=4.8" + } + }, + "node_modules/execa/node_modules/path-key": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/execa/node_modules/semver": { + "version": "5.7.1", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/execa/node_modules/shebang-command": { + "version": "1.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "shebang-regex": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/execa/node_modules/shebang-regex": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/execa/node_modules/which": { + "version": "1.3.1", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "which": "bin/which" + } + }, "node_modules/expand-brackets": { "version": "2.1.4", - "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", - "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", "dev": true, + "license": "MIT", "dependencies": { "debug": "^2.3.3", "define-property": "^0.2.5", @@ -6787,18 +5682,16 @@ }, "node_modules/expand-brackets/node_modules/debug": { "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dev": true, + "license": "MIT", "dependencies": { "ms": "2.0.0" } }, "node_modules/expand-brackets/node_modules/define-property": { "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", "dev": true, + "license": "MIT", "dependencies": { "is-descriptor": "^0.1.0" }, @@ -6808,9 +5701,8 @@ }, "node_modules/expand-brackets/node_modules/extend-shallow": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, + "license": "MIT", "dependencies": { "is-extendable": "^0.1.0" }, @@ -6818,17 +5710,88 @@ "node": ">=0.10.0" } }, + "node_modules/expand-brackets/node_modules/is-accessor-descriptor": { + "version": "0.1.6", + "dev": true, + "license": "MIT", + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-brackets/node_modules/is-accessor-descriptor/node_modules/kind-of": { + "version": "3.2.2", + "dev": true, + "license": "MIT", + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-brackets/node_modules/is-data-descriptor": { + "version": "0.1.4", + "dev": true, + "license": "MIT", + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-brackets/node_modules/is-data-descriptor/node_modules/kind-of": { + "version": "3.2.2", + "dev": true, + "license": "MIT", + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-brackets/node_modules/is-descriptor": { + "version": "0.1.6", + "dev": true, + "license": "MIT", + "dependencies": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-brackets/node_modules/is-extendable": { + "version": "0.1.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-brackets/node_modules/kind-of": { + "version": "5.1.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/expand-brackets/node_modules/ms": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/express": { "version": "4.17.1", - "resolved": "https://registry.npmjs.org/express/-/express-4.17.1.tgz", - "integrity": "sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==", "dev": true, + "license": "MIT", "dependencies": { "accepts": "~1.3.7", "array-flatten": "1.1.1", @@ -6865,59 +5828,28 @@ "node": ">= 0.10.0" } }, - "node_modules/express/node_modules/array-flatten": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", - "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=", - "dev": true - }, "node_modules/express/node_modules/debug": { "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dev": true, + "license": "MIT", "dependencies": { "ms": "2.0.0" } }, "node_modules/express/node_modules/ms": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - }, - "node_modules/express/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "node_modules/ext": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/ext/-/ext-1.4.0.tgz", - "integrity": "sha512-Key5NIsUxdqKg3vIsdw9dSuXpPCQ297y6wBjL30edxwPgt2E44WcWBZey/ZvUc6sERLTxKdyCu4gZFmUbk1Q7A==", "dev": true, - "dependencies": { - "type": "^2.0.0" - } - }, - "node_modules/ext/node_modules/type": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/type/-/type-2.1.0.tgz", - "integrity": "sha512-G9absDWvhAWCV2gmF1zKud3OyC61nZDwWvBL2DApaVFogI07CprggiQAOOjvp2NRjYWFzPyu7vwtDrQFq8jeSA==", - "dev": true + "license": "MIT" }, "node_modules/extend": { "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/extend-shallow": { "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", "dev": true, + "license": "MIT", "dependencies": { "assign-symbols": "^1.0.0", "is-extendable": "^1.0.1" @@ -6926,23 +5858,10 @@ "node": ">=0.10.0" } }, - "node_modules/extend-shallow/node_modules/is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "dependencies": { - "is-plain-object": "^2.0.4" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/external-editor": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", - "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", "dev": true, + "license": "MIT", "dependencies": { "chardet": "^0.7.0", "iconv-lite": "^0.4.24", @@ -6954,9 +5873,8 @@ }, "node_modules/extglob": { "version": "2.0.4", - "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", - "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", "dev": true, + "license": "MIT", "dependencies": { "array-unique": "^0.3.2", "define-property": "^1.0.0", @@ -6973,9 +5891,8 @@ }, "node_modules/extglob/node_modules/define-property": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", "dev": true, + "license": "MIT", "dependencies": { "is-descriptor": "^1.0.0" }, @@ -6985,9 +5902,8 @@ }, "node_modules/extglob/node_modules/extend-shallow": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, + "license": "MIT", "dependencies": { "is-extendable": "^0.1.0" }, @@ -6995,70 +5911,36 @@ "node": ">=0.10.0" } }, - "node_modules/extglob/node_modules/is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "node_modules/extglob/node_modules/is-extendable": { + "version": "0.1.1", "dev": true, - "dependencies": { - "kind-of": "^6.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/extglob/node_modules/is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "dependencies": { - "kind-of": "^6.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/extglob/node_modules/is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "dependencies": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - }, + "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/extsprintf": { "version": "1.3.0", - "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", - "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=", "dev": true, "engines": [ "node >=0.6.0" - ] + ], + "license": "MIT" }, "node_modules/fast-deep-equal": { "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==" + "license": "MIT" }, "node_modules/fast-glob": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.4.tgz", - "integrity": "sha512-kr/Oo6PX51265qeuCYsyGypiO5uJFgBS0jksyG7FUeCyQzNwYnzrNIMR1NXfkZXsMYXYLRAHgISHBz8gQcxKHQ==", + "version": "3.2.7", "dev": true, + "license": "MIT", "dependencies": { "@nodelib/fs.stat": "^2.0.2", "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.0", + "glob-parent": "^5.1.2", "merge2": "^1.3.0", - "micromatch": "^4.0.2", - "picomatch": "^2.2.1" + "micromatch": "^4.0.4" }, "engines": { "node": ">=8" @@ -7066,41 +5948,36 @@ }, "node_modules/fast-json-stable-stringify": { "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==" + "license": "MIT" }, "node_modules/fastq": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.9.0.tgz", - "integrity": "sha512-i7FVWL8HhVY+CTkwFxkN2mk3h+787ixS5S63eb78diVRc1MCssarHq3W5cj0av7YDSwmaV928RNag+U1etRQ7w==", + "version": "1.11.1", "dev": true, + "license": "ISC", "dependencies": { "reusify": "^1.0.4" } }, "node_modules/faye-websocket": { - "version": "0.10.0", - "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.10.0.tgz", - "integrity": "sha1-TkkvjQTftviQA1B/btvy1QHnxvQ=", + "version": "0.11.4", "dev": true, + "license": "Apache-2.0", "dependencies": { "websocket-driver": ">=0.5.1" }, "engines": { - "node": ">=0.4.0" + "node": ">=0.8.0" } }, "node_modules/figgy-pudding": { "version": "3.5.2", - "resolved": "https://registry.npmjs.org/figgy-pudding/-/figgy-pudding-3.5.2.tgz", - "integrity": "sha512-0btnI/H8f2pavGMN8w40mlSKOfTK2SVJmBfBeVIj3kNw0swwgzyRq0d5TJVOwodFmtvpPeWPN/MCcfuWF0Ezbw==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/figures": { "version": "3.2.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", - "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", "dev": true, + "license": "MIT", "dependencies": { "escape-string-regexp": "^1.0.5" }, @@ -7112,10 +5989,9 @@ } }, "node_modules/file-loader": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/file-loader/-/file-loader-6.1.1.tgz", - "integrity": "sha512-Klt8C4BjWSXYQAfhpYYkG4qHNTna4toMHEbWrI5IuVoxbU6uiDKeKAP99R8mmbJi3lvewn/jQBOgU4+NS3tDQw==", + "version": "6.2.0", "dev": true, + "license": "MIT", "dependencies": { "loader-utils": "^2.0.0", "schema-utils": "^3.0.0" @@ -7132,12 +6008,11 @@ } }, "node_modules/file-loader/node_modules/schema-utils": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.0.0.tgz", - "integrity": "sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA==", + "version": "3.1.0", "dev": true, + "license": "MIT", "dependencies": { - "@types/json-schema": "^7.0.6", + "@types/json-schema": "^7.0.7", "ajv": "^6.12.5", "ajv-keywords": "^3.5.2" }, @@ -7149,16 +6024,10 @@ "url": "https://opencollective.com/webpack" } }, - "node_modules/file-uri-to-path": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", - "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==" - }, "node_modules/fill-range": { "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", "dev": true, + "license": "MIT", "dependencies": { "to-regex-range": "^5.0.1" }, @@ -7168,9 +6037,8 @@ }, "node_modules/finalhandler": { "version": "1.1.2", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", - "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", "dev": true, + "license": "MIT", "dependencies": { "debug": "2.6.9", "encodeurl": "~1.0.2", @@ -7186,24 +6054,21 @@ }, "node_modules/finalhandler/node_modules/debug": { "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dev": true, + "license": "MIT", "dependencies": { "ms": "2.0.0" } }, "node_modules/finalhandler/node_modules/ms": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/find-cache-dir": { "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==", "dev": true, + "license": "MIT", "dependencies": { "commondir": "^1.0.1", "make-dir": "^3.0.2", @@ -7216,11 +6081,10 @@ "url": "https://github.com/avajs/find-cache-dir?sponsor=1" } }, - "node_modules/find-cache-dir/node_modules/find-up": { + "node_modules/find-up": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", "dev": true, + "license": "MIT", "dependencies": { "locate-path": "^5.0.0", "path-exists": "^4.0.0" @@ -7229,91 +6093,10 @@ "node": ">=8" } }, - "node_modules/find-cache-dir/node_modules/locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "dependencies": { - "p-locate": "^4.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/find-cache-dir/node_modules/make-dir": { - "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==", - "dev": true, - "dependencies": { - "semver": "^6.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/find-cache-dir/node_modules/p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "dependencies": { - "p-limit": "^2.2.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/find-cache-dir/node_modules/path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/find-cache-dir/node_modules/pkg-dir": { - "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==", - "dev": true, - "dependencies": { - "find-up": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/find-cache-dir/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/find-up": { - "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" - }, - "engines": { - "node": ">=6" - } - }, "node_modules/flush-write-stream": { "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==", "dev": true, + "license": "MIT", "dependencies": { "inherits": "^2.0.3", "readable-stream": "^2.3.6" @@ -7321,15 +6104,13 @@ }, "node_modules/flush-write-stream/node_modules/isarray": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/flush-write-stream/node_modules/readable-stream": { "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", "dev": true, + "license": "MIT", "dependencies": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", @@ -7340,25 +6121,16 @@ "util-deprecate": "~1.0.1" } }, - "node_modules/flush-write-stream/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, "node_modules/flush-write-stream/node_modules/string_decoder": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "dev": true, + "license": "MIT", "dependencies": { "safe-buffer": "~5.1.0" } }, "node_modules/follow-redirects": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.13.0.tgz", - "integrity": "sha512-aq6gF1BEKje4a9i9+5jimNFIpq4Q1WiwBToeRK5NvZBd/TRsmW8BsJfOEGkr76TbOyPVD3OVDN910EcUNtRYEA==", + "version": "1.14.1", "dev": true, "funding": [ { @@ -7366,38 +6138,40 @@ "url": "https://github.com/sponsors/RubenVerborgh" } ], + "license": "MIT", "engines": { "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } } }, "node_modules/for-in": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", - "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/foreach": { "version": "2.0.5", - "resolved": "https://registry.npmjs.org/foreach/-/foreach-2.0.5.tgz", - "integrity": "sha1-C+4AUBiusmDQo6865ljdATbsG5k=" + "license": "MIT" }, "node_modules/forever-agent": { "version": "0.6.1", - "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", - "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", "dev": true, + "license": "Apache-2.0", "engines": { "node": "*" } }, "node_modules/form-data": { "version": "2.3.3", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", - "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", "dev": true, + "license": "MIT", "dependencies": { "asynckit": "^0.4.0", "combined-stream": "^1.0.6", @@ -7408,19 +6182,29 @@ } }, "node_modules/forwarded": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz", - "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=", + "version": "0.2.0", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.6" } }, + "node_modules/fraction.js": { + "version": "4.1.1", + "dev": true, + "license": "MIT", + "engines": { + "node": "*" + }, + "funding": { + "type": "patreon", + "url": "https://www.patreon.com/infusion" + } + }, "node_modules/fragment-cache": { "version": "0.2.1", - "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", - "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", "dev": true, + "license": "MIT", "dependencies": { "map-cache": "^0.2.2" }, @@ -7430,18 +6214,16 @@ }, "node_modules/fresh": { "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.6" } }, "node_modules/from2": { "version": "2.3.0", - "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz", - "integrity": "sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8=", "dev": true, + "license": "MIT", "dependencies": { "inherits": "^2.0.1", "readable-stream": "^2.0.0" @@ -7449,15 +6231,13 @@ }, "node_modules/from2/node_modules/isarray": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/from2/node_modules/readable-stream": { "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", "dev": true, + "license": "MIT", "dependencies": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", @@ -7468,26 +6248,18 @@ "util-deprecate": "~1.0.1" } }, - "node_modules/from2/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, "node_modules/from2/node_modules/string_decoder": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "dev": true, + "license": "MIT", "dependencies": { "safe-buffer": "~5.1.0" } }, "node_modules/fs-extra": { "version": "4.0.2", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-4.0.2.tgz", - "integrity": "sha1-+RcExT0bRh+JNFKwwwfZmXZHq2s=", "dev": true, + "license": "MIT", "dependencies": { "graceful-fs": "^4.1.2", "jsonfile": "^4.0.0", @@ -7496,9 +6268,8 @@ }, "node_modules/fs-minipass": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", - "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", "dev": true, + "license": "ISC", "dependencies": { "minipass": "^3.0.0" }, @@ -7508,9 +6279,8 @@ }, "node_modules/fs-write-stream-atomic": { "version": "1.0.10", - "resolved": "https://registry.npmjs.org/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz", - "integrity": "sha1-tH31NJPvkR33VzHnCp3tAYnbQMk=", "dev": true, + "license": "ISC", "dependencies": { "graceful-fs": "^4.1.2", "iferr": "^0.1.5", @@ -7520,15 +6290,13 @@ }, "node_modules/fs-write-stream-atomic/node_modules/isarray": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/fs-write-stream-atomic/node_modules/readable-stream": { "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", "dev": true, + "license": "MIT", "dependencies": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", @@ -7539,53 +6307,28 @@ "util-deprecate": "~1.0.1" } }, - "node_modules/fs-write-stream-atomic/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, "node_modules/fs-write-stream-atomic/node_modules/string_decoder": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "dev": true, + "license": "MIT", "dependencies": { "safe-buffer": "~5.1.0" } }, "node_modules/fs.realpath": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", - "dev": true - }, - "node_modules/fsevents": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.1.3.tgz", - "integrity": "sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ==", - "deprecated": "\"Please update to latest v2.3 or v2.2\"", "dev": true, - "hasInstallScript": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } + "license": "ISC" }, "node_modules/function-bind": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/gauge": { "version": "2.7.4", - "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", - "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=", "dev": true, + "license": "ISC", "dependencies": { "aproba": "^1.0.3", "console-control-strings": "^1.0.0", @@ -7599,18 +6342,16 @@ }, "node_modules/gauge/node_modules/ansi-regex": { "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/gauge/node_modules/is-fullwidth-code-point": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", "dev": true, + "license": "MIT", "dependencies": { "number-is-nan": "^1.0.0" }, @@ -7620,9 +6361,8 @@ }, "node_modules/gauge/node_modules/string-width": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", "dev": true, + "license": "MIT", "dependencies": { "code-point-at": "^1.0.0", "is-fullwidth-code-point": "^1.0.0", @@ -7634,9 +6374,8 @@ }, "node_modules/gauge/node_modules/strip-ansi": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", "dev": true, + "license": "MIT", "dependencies": { "ansi-regex": "^2.0.0" }, @@ -7646,26 +6385,23 @@ }, "node_modules/gensync": { "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==", "dev": true, + "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/get-caller-file": { "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "license": "ISC", "engines": { "node": "6.* || 8.* || >= 10.*" } }, "node_modules/get-intrinsic": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.0.1.tgz", - "integrity": "sha512-ZnWP+AmS1VUaLgTRy47+zKtjTxz+0xMpx3I52i+aalBK1QP19ggLF3Db89KJX7kjfOfP2eoa01qc++GwPgufPg==", + "version": "1.1.1", "dev": true, + "license": "MIT", "dependencies": { "function-bind": "^1.1.1", "has": "^1.0.3", @@ -7677,9 +6413,8 @@ }, "node_modules/get-stream": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", - "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", "dev": true, + "license": "MIT", "dependencies": { "pump": "^3.0.0" }, @@ -7689,27 +6424,24 @@ }, "node_modules/get-value": { "version": "2.0.6", - "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", - "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/getpass": { "version": "0.1.7", - "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", - "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", "dev": true, + "license": "MIT", "dependencies": { "assert-plus": "^1.0.0" } }, "node_modules/glob": { "version": "7.1.6", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", - "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", "dev": true, + "license": "ISC", "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -7726,10 +6458,9 @@ } }, "node_modules/glob-parent": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.1.tgz", - "integrity": "sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ==", + "version": "5.1.2", "dev": true, + "license": "ISC", "dependencies": { "is-glob": "^4.0.1" }, @@ -7739,18 +6470,16 @@ }, "node_modules/globals": { "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } }, "node_modules/globby": { - "version": "11.0.1", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.1.tgz", - "integrity": "sha512-iH9RmgwCmUJHi2z5o2l3eTtGBtXek1OYlHrbcxOYugyHLmAsZrPj43OtHThd62Buh/Vv6VyCBD2bdyWcGNQqoQ==", + "version": "11.0.4", "dev": true, + "license": "MIT", "dependencies": { "array-union": "^2.1.0", "dir-glob": "^3.0.1", @@ -7767,21 +6496,18 @@ } }, "node_modules/graceful-fs": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz", - "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==", - "dev": true + "version": "4.2.6", + "dev": true, + "license": "ISC" }, "node_modules/handle-thing": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.1.tgz", - "integrity": "sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/handlebars": { - "version": "4.7.6", - "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.6.tgz", - "integrity": "sha512-1f2BACcBfiwAfStCKZNrUCgqNZkGsAT7UM3kkYtXuLo0KnaVfjKOyf7PRzB6++aK9STyT1Pd2ZCPe3EGOXleXA==", + "version": "4.7.7", + "license": "MIT", "dependencies": { "minimist": "^1.2.5", "neo-async": "^2.6.0", @@ -7798,21 +6524,25 @@ "uglify-js": "^3.1.4" } }, + "node_modules/handlebars/node_modules/source-map": { + "version": "0.6.1", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/har-schema": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", - "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=", "dev": true, + "license": "ISC", "engines": { "node": ">=4" } }, "node_modules/har-validator": { "version": "5.1.5", - "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz", - "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==", - "deprecated": "this library is no longer supported", "dev": true, + "license": "MIT", "dependencies": { "ajv": "^6.12.3", "har-schema": "^2.0.0" @@ -7823,9 +6553,8 @@ }, "node_modules/has": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", "dev": true, + "license": "MIT", "dependencies": { "function-bind": "^1.1.1" }, @@ -7835,18 +6564,16 @@ }, "node_modules/has-flag": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } }, "node_modules/has-symbols": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz", - "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==", + "version": "1.0.2", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -7856,15 +6583,13 @@ }, "node_modules/has-unicode": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", - "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/has-value": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", - "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", "dev": true, + "license": "MIT", "dependencies": { "get-value": "^2.0.6", "has-values": "^1.0.0", @@ -7876,9 +6601,8 @@ }, "node_modules/has-values": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", - "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", "dev": true, + "license": "MIT", "dependencies": { "is-number": "^3.0.0", "kind-of": "^4.0.0" @@ -7889,9 +6613,8 @@ }, "node_modules/has-values/node_modules/is-number": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", "dev": true, + "license": "MIT", "dependencies": { "kind-of": "^3.0.2" }, @@ -7901,9 +6624,8 @@ }, "node_modules/has-values/node_modules/is-number/node_modules/kind-of": { "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, + "license": "MIT", "dependencies": { "is-buffer": "^1.1.5" }, @@ -7913,9 +6635,8 @@ }, "node_modules/has-values/node_modules/kind-of": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", - "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", "dev": true, + "license": "MIT", "dependencies": { "is-buffer": "^1.1.5" }, @@ -7925,8 +6646,8 @@ }, "node_modules/hash-base": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz", - "integrity": "sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==", + "dev": true, + "license": "MIT", "dependencies": { "inherits": "^2.0.4", "readable-stream": "^3.6.0", @@ -7936,10 +6657,29 @@ "node": ">=4" } }, + "node_modules/hash-base/node_modules/safe-buffer": { + "version": "5.2.1", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, "node_modules/hash.js": { "version": "1.1.7", - "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", - "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", + "dev": true, + "license": "MIT", "dependencies": { "inherits": "^2.0.3", "minimalistic-assert": "^1.0.1" @@ -7947,23 +6687,21 @@ }, "node_modules/he": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", - "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", "dev": true, + "license": "MIT", "bin": { "he": "bin/he" } }, "node_modules/hex-color-regex": { "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==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/hmac-drbg": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", - "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=", + "dev": true, + "license": "MIT", "dependencies": { "hash.js": "^1.0.3", "minimalistic-assert": "^1.0.0", @@ -7971,10 +6709,9 @@ } }, "node_modules/hosted-git-info": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-3.0.7.tgz", - "integrity": "sha512-fWqc0IcuXs+BmE9orLDyVykAG9GJtGLGuZAAqgcckPgv5xad4AcXGIv8galtQvlwutxSlaMcdw7BUtq2EIvqCQ==", + "version": "3.0.8", "dev": true, + "license": "ISC", "dependencies": { "lru-cache": "^6.0.0" }, @@ -7984,9 +6721,8 @@ }, "node_modules/hpack.js": { "version": "2.1.6", - "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz", - "integrity": "sha1-h3dMCUnlE/QuhFdbPEVoH63ioLI=", "dev": true, + "license": "MIT", "dependencies": { "inherits": "^2.0.1", "obuf": "^1.0.0", @@ -7996,15 +6732,13 @@ }, "node_modules/hpack.js/node_modules/isarray": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/hpack.js/node_modules/readable-stream": { "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", "dev": true, + "license": "MIT", "dependencies": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", @@ -8015,50 +6749,33 @@ "util-deprecate": "~1.0.1" } }, - "node_modules/hpack.js/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, "node_modules/hpack.js/node_modules/string_decoder": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "dev": true, + "license": "MIT", "dependencies": { "safe-buffer": "~5.1.0" } }, "node_modules/hsl-regex": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/hsl-regex/-/hsl-regex-1.0.0.tgz", - "integrity": "sha1-1JMwx4ntgZ4nakwNJy3/owsY/m4=", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/hsla-regex": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/hsla-regex/-/hsla-regex-1.0.0.tgz", - "integrity": "sha1-wc56MWjIxmFAM6S194d/OyJfnDg=", - "dev": true - }, - "node_modules/html-comment-regex": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/html-comment-regex/-/html-comment-regex-1.1.2.tgz", - "integrity": "sha512-P+M65QY2JQ5Y0G9KKdlDpo0zK+/OHptU5AaBwUfAIDJZk1MYf32Frm84EcOytfJE0t5JvkAnKlmjsXDnWzCJmQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/html-entities": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-1.3.1.tgz", - "integrity": "sha512-rhE/4Z3hIhzHAUKbW8jVcCyuT5oJCXXqhN/6mXXVCpzTmvJnoH2HL/bt3EZ6p55jbFJBeAe1ZNpL5BugLujxNA==", - "dev": true + "version": "1.4.0", + "dev": true, + "license": "MIT" }, "node_modules/htmlparser2": { "version": "3.10.1", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.10.1.tgz", - "integrity": "sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ==", "dev": true, + "license": "MIT", "dependencies": { "domelementtype": "^1.3.1", "domhandler": "^2.3.0", @@ -8068,29 +6785,20 @@ "readable-stream": "^3.1.1" } }, - "node_modules/htmlparser2/node_modules/entities": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz", - "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==", - "dev": true - }, "node_modules/http-cache-semantics": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz", - "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==", - "dev": true + "dev": true, + "license": "BSD-2-Clause" }, "node_modules/http-deceiver": { "version": "1.2.7", - "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz", - "integrity": "sha1-+nFolEq5pRnTN8sL7HKE3D5yPYc=", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/http-errors": { "version": "1.7.2", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz", - "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==", "dev": true, + "license": "MIT", "dependencies": { "depd": "~1.1.2", "inherits": "2.0.3", @@ -8104,15 +6812,18 @@ }, "node_modules/http-errors/node_modules/inherits": { "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", - "dev": true + "dev": true, + "license": "ISC" + }, + "node_modules/http-parser-js": { + "version": "0.5.3", + "dev": true, + "license": "MIT" }, "node_modules/http-proxy": { "version": "1.18.1", - "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz", - "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", "dev": true, + "license": "MIT", "dependencies": { "eventemitter3": "^4.0.0", "follow-redirects": "^1.0.0", @@ -8124,9 +6835,8 @@ }, "node_modules/http-proxy-agent": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz", - "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==", "dev": true, + "license": "MIT", "dependencies": { "@tootallnate/once": "1", "agent-base": "6", @@ -8138,9 +6848,8 @@ }, "node_modules/http-proxy-middleware": { "version": "0.19.1", - "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-0.19.1.tgz", - "integrity": "sha512-yHYTgWMQO8VvwNS22eLLloAkvungsKdKTLO8AJlftYIKNfJr3GK3zK0ZCfzDDGUBttdGc8xFy1mCitvNKQtC3Q==", "dev": true, + "license": "MIT", "dependencies": { "http-proxy": "^1.17.0", "is-glob": "^4.0.0", @@ -8153,9 +6862,8 @@ }, "node_modules/http-proxy-middleware/node_modules/braces": { "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", "dev": true, + "license": "MIT", "dependencies": { "arr-flatten": "^1.1.0", "array-unique": "^0.3.2", @@ -8174,9 +6882,8 @@ }, "node_modules/http-proxy-middleware/node_modules/braces/node_modules/extend-shallow": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, + "license": "MIT", "dependencies": { "is-extendable": "^0.1.0" }, @@ -8186,9 +6893,8 @@ }, "node_modules/http-proxy-middleware/node_modules/fill-range": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", "dev": true, + "license": "MIT", "dependencies": { "extend-shallow": "^2.0.1", "is-number": "^3.0.0", @@ -8201,9 +6907,8 @@ }, "node_modules/http-proxy-middleware/node_modules/fill-range/node_modules/extend-shallow": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, + "license": "MIT", "dependencies": { "is-extendable": "^0.1.0" }, @@ -8211,11 +6916,18 @@ "node": ">=0.10.0" } }, + "node_modules/http-proxy-middleware/node_modules/is-extendable": { + "version": "0.1.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/http-proxy-middleware/node_modules/is-number": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", "dev": true, + "license": "MIT", "dependencies": { "kind-of": "^3.0.2" }, @@ -8225,9 +6937,8 @@ }, "node_modules/http-proxy-middleware/node_modules/is-number/node_modules/kind-of": { "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, + "license": "MIT", "dependencies": { "is-buffer": "^1.1.5" }, @@ -8237,9 +6948,8 @@ }, "node_modules/http-proxy-middleware/node_modules/micromatch": { "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", "dev": true, + "license": "MIT", "dependencies": { "arr-diff": "^4.0.0", "array-unique": "^0.3.2", @@ -8261,9 +6971,8 @@ }, "node_modules/http-proxy-middleware/node_modules/to-regex-range": { "version": "2.1.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", - "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", "dev": true, + "license": "MIT", "dependencies": { "is-number": "^3.0.0", "repeat-string": "^1.6.1" @@ -8274,9 +6983,8 @@ }, "node_modules/http-signature": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", - "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", "dev": true, + "license": "MIT", "dependencies": { "assert-plus": "^1.0.0", "jsprim": "^1.2.2", @@ -8289,15 +6997,13 @@ }, "node_modules/https-browserify": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz", - "integrity": "sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM=", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/https-proxy-agent": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz", - "integrity": "sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA==", "dev": true, + "license": "MIT", "dependencies": { "agent-base": "6", "debug": "4" @@ -8308,18 +7014,16 @@ }, "node_modules/humanize-ms": { "version": "1.2.1", - "resolved": "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz", - "integrity": "sha1-xG4xWaKT9riW2ikxbYtv6Lt5u+0=", "dev": true, + "license": "MIT", "dependencies": { "ms": "^2.0.0" } }, "node_modules/iconv-lite": { "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", "dev": true, + "license": "MIT", "dependencies": { "safer-buffer": ">= 2.1.2 < 3" }, @@ -8328,21 +7032,18 @@ } }, "node_modules/icss-utils": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-4.1.1.tgz", - "integrity": "sha512-4aFq7wvWyMHKgxsH8QQtGpvbASCf+eM3wPRLI6R+MgAnTCZ6STYsRvttLvRWK0Nfif5piF394St3HeJDaljGPA==", + "version": "5.1.0", "dev": true, - "dependencies": { - "postcss": "^7.0.14" - }, + "license": "ISC", "engines": { - "node": ">= 6" + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" } }, "node_modules/ieee754": { "version": "1.2.1", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", - "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", "dev": true, "funding": [ { @@ -8357,37 +7058,34 @@ "type": "consulting", "url": "https://feross.org/support" } - ] + ], + "license": "BSD-3-Clause" }, "node_modules/iferr": { "version": "0.1.5", - "resolved": "https://registry.npmjs.org/iferr/-/iferr-0.1.5.tgz", - "integrity": "sha1-xg7taebY/bazEEofy8ocGS3FtQE=", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/ignore": { "version": "5.1.8", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz", - "integrity": "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==", "dev": true, + "license": "MIT", "engines": { "node": ">= 4" } }, "node_modules/ignore-walk": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-3.0.3.tgz", - "integrity": "sha512-m7o6xuOaT1aqheYHKf8W6J5pYH85ZI9w077erOzLje3JsB1gkafkAhHHY19dqjulgIZHFm32Cp5uNZgcQqdJKw==", + "version": "3.0.4", "dev": true, + "license": "ISC", "dependencies": { "minimatch": "^3.0.4" } }, "node_modules/image-size": { "version": "0.5.5", - "resolved": "https://registry.npmjs.org/image-size/-/image-size-0.5.5.tgz", - "integrity": "sha1-Cd/Uq50g4p6xw+gLiZA3jfnjy5w=", "dev": true, + "license": "MIT", "optional": true, "bin": { "image-size": "bin/image-size.js" @@ -8398,27 +7096,27 @@ }, "node_modules/immediate": { "version": "3.0.6", - "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz", - "integrity": "sha1-nbHb0Pr43m++D13V5Wu2BigN5ps=" + "license": "MIT" }, "node_modules/import-fresh": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-2.0.0.tgz", - "integrity": "sha1-2BNVwVYS04bGH53dOSLUMEgipUY=", + "version": "3.3.0", "dev": true, + "license": "MIT", "dependencies": { - "caller-path": "^2.0.0", - "resolve-from": "^3.0.0" + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" }, "engines": { - "node": ">=4" + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/import-local": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/import-local/-/import-local-2.0.0.tgz", - "integrity": "sha512-b6s04m3O+s3CGSbqDIyP4R6aAwAeYlVq9+WUWep6iHa8ETRf9yei1U48C5MmfJmV9AiLYYBKPMq/W+/WRpQmCQ==", "dev": true, + "license": "MIT", "dependencies": { "pkg-dir": "^3.0.0", "resolve-cwd": "^2.0.0" @@ -8430,41 +7128,98 @@ "node": ">=6" } }, + "node_modules/import-local/node_modules/find-up": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "locate-path": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/import-local/node_modules/locate-path": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/import-local/node_modules/p-limit": { + "version": "2.3.0", + "dev": true, + "license": "MIT", + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/import-local/node_modules/p-locate": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "p-limit": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/import-local/node_modules/path-exists": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/import-local/node_modules/pkg-dir": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "find-up": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, "node_modules/imurmurhash": { "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", "dev": true, + "license": "MIT", "engines": { "node": ">=0.8.19" } }, "node_modules/indent-string": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", - "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, - "node_modules/indexes-of": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/indexes-of/-/indexes-of-1.0.1.tgz", - "integrity": "sha1-8w9xbI4r00bHtn0985FVZqfAVgc=", - "dev": true - }, "node_modules/infer-owner": { "version": "1.0.4", - "resolved": "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz", - "integrity": "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/inflight": { "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", "dev": true, + "license": "ISC", "dependencies": { "once": "^1.3.0", "wrappy": "1" @@ -8472,23 +7227,21 @@ }, "node_modules/inherits": { "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + "dev": true, + "license": "ISC" }, "node_modules/ini": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ini/-/ini-2.0.0.tgz", - "integrity": "sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==", "dev": true, + "license": "ISC", "engines": { "node": ">=10" } }, "node_modules/inquirer": { "version": "7.3.3", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-7.3.3.tgz", - "integrity": "sha512-JG3eIAj5V9CwcGvuOmoo6LB9kbAYT8HXffUl6memuszlwDC/qvFAJw49XJ5NROSFNPxp3iQg1GqkFhaY/CR0IA==", "dev": true, + "license": "MIT", "dependencies": { "ansi-escapes": "^4.2.1", "chalk": "^4.1.0", @@ -8508,20 +7261,10 @@ "node": ">=8.0.0" } }, - "node_modules/inquirer/node_modules/ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, "node_modules/inquirer/node_modules/ansi-styles": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, + "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, @@ -8533,10 +7276,9 @@ } }, "node_modules/inquirer/node_modules/chalk": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", - "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", + "version": "4.1.1", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -8550,9 +7292,8 @@ }, "node_modules/inquirer/node_modules/color-convert": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, + "license": "MIT", "dependencies": { "color-name": "~1.1.4" }, @@ -8562,65 +7303,21 @@ }, "node_modules/inquirer/node_modules/color-name": { "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/inquirer/node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/inquirer/node_modules/has-flag": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/inquirer/node_modules/is-fullwidth-code-point": { - "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==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/inquirer/node_modules/string-width": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", - "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", - "dev": true, - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/inquirer/node_modules/strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", - "dev": true, - "dependencies": { - "ansi-regex": "^5.0.0" - }, + "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/inquirer/node_modules/supports-color": { "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, + "license": "MIT", "dependencies": { "has-flag": "^4.0.0" }, @@ -8630,9 +7327,8 @@ }, "node_modules/internal-ip": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/internal-ip/-/internal-ip-4.3.0.tgz", - "integrity": "sha512-S1zBo1D6zcsyuC6PMmY5+55YMILQ9av8lotMx447Bq6SAgo/sDK6y6uUKmuYhW7eacnIhFfsPmCNYdDzsnnDCg==", "dev": true, + "license": "MIT", "dependencies": { "default-gateway": "^4.2.0", "ipaddr.js": "^1.9.0" @@ -8642,87 +7338,75 @@ } }, "node_modules/ionicons": { - "version": "5.2.3", - "resolved": "https://registry.npmjs.org/ionicons/-/ionicons-5.2.3.tgz", - "integrity": "sha512-87qtgBkieKVFagwYA9Cf91B3PCahQbEOMwMt8bSvlQSgflZ4eE5qI4MGj2ZlIyadeX0dgo+0CzZsy3ow0CsBAg==" + "version": "5.5.2", + "license": "MIT", + "dependencies": { + "@stencil/core": "^2.5.0" + } }, "node_modules/ip": { "version": "1.1.5", - "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.5.tgz", - "integrity": "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/ip-regex": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-2.1.0.tgz", - "integrity": "sha1-+ni/XS5pE8kRzp+BnuUUa7bYROk=", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } }, "node_modules/ipaddr.js": { "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==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.10" } }, "node_modules/is-absolute-url": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-2.1.0.tgz", - "integrity": "sha1-UFMN+4T8yap9vnhS6Do3uTufKqY=", + "version": "3.0.3", "dev": true, + "license": "MIT", "engines": { - "node": ">=0.10.0" + "node": ">=8" } }, "node_modules/is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "version": "1.0.0", "dev": true, + "license": "MIT", "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-accessor-descriptor/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "dependencies": { - "is-buffer": "^1.1.5" + "kind-of": "^6.0.0" }, "engines": { "node": ">=0.10.0" } }, "node_modules/is-arguments": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.0.4.tgz", - "integrity": "sha512-xPh0Rmt8NE65sNzvyUmWgI1tz3mKq74lGA0mL8LYZcoIzKOzDh6HmrYm3d18k60nHerC8A9Km8kYu87zfSFnLA==", + "version": "1.1.0", "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.0" + }, "engines": { "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, "node_modules/is-arrayish": { "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/is-binary-path": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", "dev": true, + "license": "MIT", "dependencies": { "binary-extensions": "^2.0.0" }, @@ -8732,27 +7416,13 @@ }, "node_modules/is-buffer": { "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", - "dev": true - }, - "node_modules/is-callable": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.2.tgz", - "integrity": "sha512-dnMqspv5nU3LoewK2N/y7KLtxtakvTuaCsU9FU50/QDmdbHNy/4/JuRtMHqRU22o3q+W89YQndQEeCVwK+3qrA==", "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } + "license": "MIT" }, "node_modules/is-color-stop": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-color-stop/-/is-color-stop-1.1.0.tgz", - "integrity": "sha1-z/9HGu5N1cnhWFmPvhKWe1za00U=", "dev": true, + "license": "MIT", "dependencies": { "css-color-names": "^0.0.4", "hex-color-regex": "^1.1.0", @@ -8762,11 +7432,18 @@ "rgba-regex": "^1.0.0" } }, - "node_modules/is-core-module": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.2.0.tgz", - "integrity": "sha512-XRAfAdyyY5F5cOXn7hYQDqh2Xmii+DEfIcQGxK/uNwMHhIkPWO0g8msXcbzLe+MpGoR951MlqM/2iIlU4vKDdQ==", + "node_modules/is-color-stop/node_modules/css-color-names": { + "version": "0.0.4", "dev": true, + "license": "MIT", + "engines": { + "node": "*" + } + }, + "node_modules/is-core-module": { + "version": "2.4.0", + "dev": true, + "license": "MIT", "dependencies": { "has": "^1.0.3" }, @@ -8775,34 +7452,20 @@ } }, "node_modules/is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "version": "1.0.0", "dev": true, + "license": "MIT", "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-data-descriptor/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "dependencies": { - "is-buffer": "^1.1.5" + "kind-of": "^6.0.0" }, "engines": { "node": ">=0.10.0" } }, "node_modules/is-date-object": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.2.tgz", - "integrity": "sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g==", + "version": "1.0.4", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -8811,42 +7474,22 @@ } }, "node_modules/is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "version": "1.0.2", "dev": true, + "license": "MIT", "dependencies": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" }, "engines": { "node": ">=0.10.0" } }, - "node_modules/is-descriptor/node_modules/kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-directory": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/is-directory/-/is-directory-0.3.1.tgz", - "integrity": "sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/is-docker": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.1.1.tgz", - "integrity": "sha512-ZOoqiXfEwtGknTiuDEy8pN2CfE3TxMHprvNer1mXiqwkOT77Rw3YVrUQ52EqAOU3QAWDQ+bQdx7HJzrv7LS2Hw==", + "version": "2.2.1", "dev": true, + "license": "MIT", "bin": { "is-docker": "cli.js" }, @@ -8858,36 +7501,36 @@ } }, "node_modules/is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", + "version": "1.0.1", "dev": true, + "license": "MIT", + "dependencies": { + "is-plain-object": "^2.0.4" + }, "engines": { "node": ">=0.10.0" } }, "node_modules/is-extglob": { "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/is-fullwidth-code-point": { - "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=", + "version": "3.0.0", + "dev": true, + "license": "MIT", "engines": { - "node": ">=4" + "node": ">=8" } }, "node_modules/is-glob": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", - "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", "dev": true, + "license": "MIT", "dependencies": { "is-extglob": "^2.1.1" }, @@ -8897,60 +7540,37 @@ }, "node_modules/is-interactive": { "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==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/is-lambda": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-lambda/-/is-lambda-1.0.1.tgz", - "integrity": "sha1-PZh3iZ5qU+/AFgUEzeFfgubwYdU=", - "dev": true - }, - "node_modules/is-negative-zero": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.0.tgz", - "integrity": "sha1-lVOxIbD6wohp2p7UWeIMdUN4hGE=", "dev": true, - "engines": { - "node": ">= 0.4" - } + "license": "MIT" }, "node_modules/is-number": { "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.12.0" } }, - "node_modules/is-obj": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", - "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==", - "dev": true, - "engines": { - "node": ">=8" - } - }, "node_modules/is-path-cwd": { "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-2.2.0.tgz", - "integrity": "sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } }, "node_modules/is-path-in-cwd": { "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==", "dev": true, + "license": "MIT", "dependencies": { "is-path-inside": "^2.1.0" }, @@ -8960,9 +7580,8 @@ }, "node_modules/is-path-inside": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-2.1.0.tgz", - "integrity": "sha512-wiyhTzfDWsvwAW53OBWF5zuvaOGlZ6PwYxAbPVDhpm+gM09xKQGjBq/8uYN12aDvMxnAnq3dxTyoSoRNmg5YFg==", "dev": true, + "license": "MIT", "dependencies": { "path-is-inside": "^1.0.2" }, @@ -8972,9 +7591,8 @@ }, "node_modules/is-plain-object": { "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==", "dev": true, + "license": "MIT", "dependencies": { "isobject": "^3.0.1" }, @@ -8983,12 +7601,12 @@ } }, "node_modules/is-regex": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.1.tgz", - "integrity": "sha512-1+QkEcxiLlB7VEyFtyBg94e08OAsvq7FUBgApTq/w2ymCLyKJgDPsybBENVtA7XCQEgEXxKPonG+mvYRxh/LIg==", + "version": "1.1.3", "dev": true, + "license": "MIT", "dependencies": { - "has-symbols": "^1.0.1" + "call-bind": "^1.0.2", + "has-symbols": "^1.0.2" }, "engines": { "node": ">= 0.4" @@ -8999,66 +7617,50 @@ }, "node_modules/is-resolvable": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-resolvable/-/is-resolvable-1.1.0.tgz", - "integrity": "sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/is-stream": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", - "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } }, - "node_modules/is-svg": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-svg/-/is-svg-3.0.0.tgz", - "integrity": "sha512-gi4iHK53LR2ujhLVVj+37Ykh9GLqYHX6JOVXbLAucaG/Cqw9xwdFOjDM2qeifLs1sF1npXXFvDu0r5HNgCMrzQ==", - "dev": true, - "dependencies": { - "html-comment-regex": "^1.1.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/is-symbol": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.3.tgz", - "integrity": "sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ==", - "dev": true, - "dependencies": { - "has-symbols": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/is-typedarray": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", - "dev": true + "dev": true, + "license": "MIT" + }, + "node_modules/is-unicode-supported": { + "version": "0.1.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-what": { + "version": "3.14.1", + "dev": true, + "license": "MIT" }, "node_modules/is-windows": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", - "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/is-wsl": { "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", - "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", "dev": true, + "license": "MIT", "dependencies": { "is-docker": "^2.0.0" }, @@ -9068,44 +7670,38 @@ }, "node_modules/isarray": { "version": "2.0.5", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", - "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==" + "license": "MIT" }, "node_modules/isexe": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/isobject": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/isstream": { "version": "0.1.2", - "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", - "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/istanbul-lib-coverage": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.0.0.tgz", - "integrity": "sha512-UiUIqxMgRDET6eR+o5HbfRYP1l0hqkWOs7vNxC/mggutCMUIhWMm8gAHb8tHlyfD3/l6rlgNA5cKdDzEAf6hEg==", "dev": true, + "license": "BSD-3-Clause", "engines": { "node": ">=8" } }, "node_modules/istanbul-lib-instrument": { "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==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { "@babel/core": "^7.7.5", "@istanbuljs/schema": "^0.1.2", @@ -9118,18 +7714,16 @@ }, "node_modules/istanbul-lib-instrument/node_modules/semver": { "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", "dev": true, + "license": "ISC", "bin": { "semver": "bin/semver.js" } }, "node_modules/jest-worker": { - "version": "26.5.0", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-26.5.0.tgz", - "integrity": "sha512-kTw66Dn4ZX7WpjZ7T/SUDgRhapFRKWmisVAF0Rv4Fu8SLFD7eLbqpLvbxVqYhSgaWa7I+bW7pHnbyfNsH6stug==", + "version": "26.6.2", "dev": true, + "license": "MIT", "dependencies": { "@types/node": "*", "merge-stream": "^2.0.0", @@ -9141,18 +7735,16 @@ }, "node_modules/jest-worker/node_modules/has-flag": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/jest-worker/node_modules/supports-color": { "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, + "license": "MIT", "dependencies": { "has-flag": "^4.0.0" }, @@ -9162,15 +7754,13 @@ }, "node_modules/js-tokens": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/js-yaml": { - "version": "3.14.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.0.tgz", - "integrity": "sha512-/4IbIeHcD9VMHFqDR/gQ7EdZdLimOvW2DdcxFjdyyZ9NsbS+ccrXqVWDtab/lRl5AlUqmpBx8EhPaWR+OtY17A==", + "version": "3.14.1", "dev": true, + "license": "MIT", "dependencies": { "argparse": "^1.0.7", "esprima": "^4.0.0" @@ -9181,15 +7771,13 @@ }, "node_modules/jsbn": { "version": "0.1.1", - "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", - "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/jsesc": { "version": "2.5.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", "dev": true, + "license": "MIT", "bin": { "jsesc": "bin/jsesc" }, @@ -9199,52 +7787,43 @@ }, "node_modules/json-parse-better-errors": { "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==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/json-parse-even-better-errors": { "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==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/json-pointer": { "version": "0.6.1", - "resolved": "https://registry.npmjs.org/json-pointer/-/json-pointer-0.6.1.tgz", - "integrity": "sha512-3OvjqKdCBvH41DLpV4iSt6v2XhZXV1bPB4OROuknvUXI7ZQNofieCPkmE26stEJ9zdQuvIxDHCuYhfgxFAAs+Q==", + "license": "MIT", "dependencies": { "foreach": "^2.0.4" } }, "node_modules/json-schema": { "version": "0.2.3", - "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", - "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=", "dev": true }, "node_modules/json-schema-traverse": { "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==" + "license": "MIT" }, "node_modules/json-stringify-safe": { "version": "5.0.1", - "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", - "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/json3": { "version": "3.3.3", - "resolved": "https://registry.npmjs.org/json3/-/json3-3.3.3.tgz", - "integrity": "sha512-c7/8mbUsKigAbLkD5B010BK4D9LZm7A1pNItkEwiUZRpIN66exu/e7YQWysGun+TRKaJp8MhemM+VkfWv42aCA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/json5": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.1.3.tgz", - "integrity": "sha512-KXPvOm8K9IJKFM0bmdn8QXh7udDh1g/giieX0NLCaMnb4hEiVFqnop2ImTXCc5e0/oHz3LTqmHGtExn5hfMkOA==", + "version": "2.2.0", "dev": true, + "license": "MIT", "dependencies": { "minimist": "^1.2.5" }, @@ -9257,54 +7836,36 @@ }, "node_modules/jsonc-parser": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.0.0.tgz", - "integrity": "sha512-fQzRfAbIBnR0IQvftw9FJveWiHp72Fg20giDrHz6TdfB12UH/uue0D3hm57UB5KgAVuniLMCaS8P1IMj9NR7cA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/jsonfile": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", "dev": true, + "license": "MIT", "optionalDependencies": { "graceful-fs": "^4.1.6" } }, "node_modules/jsonparse": { "version": "1.3.1", - "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", - "integrity": "sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA=", "dev": true, "engines": [ "node >= 0.2.0" - ] + ], + "license": "MIT" }, "node_modules/jsonpointerx": { - "version": "1.0.30", - "resolved": "https://registry.npmjs.org/jsonpointerx/-/jsonpointerx-1.0.30.tgz", - "integrity": "sha512-nEyQ2/CntckMpxK4ZTDOO3NmuRmxYTT5qnwnxoYKHZon1aa4TtEzLXF3FDVIH8Ra15zoKaNVmff1O3jcSlEKqA==" - }, - "node_modules/jsontokens": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/jsontokens/-/jsontokens-3.0.0.tgz", - "integrity": "sha512-P0QZC5AjOkn3t1ej6OuI7+XqoEctYj83UK4pw0WpHY4/z6a5PpZCJSpp5NZodq94GFkw2PfB9DPFoDM5qpyp/g==", - "dependencies": { - "@types/elliptic": "^6.4.9", - "asn1.js": "^5.0.1", - "base64url": "^3.0.1", - "ecdsa-sig-formatter": "^1.0.11", - "elliptic": "^6.4.1", - "sha.js": "^2.4.11" - } + "version": "1.1.3", + "license": "MIT" }, "node_modules/jsprim": { "version": "1.4.1", - "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", - "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", "dev": true, "engines": [ "node >=0.6.0" ], + "license": "MIT", "dependencies": { "assert-plus": "1.0.0", "extsprintf": "1.3.0", @@ -9314,43 +7875,40 @@ }, "node_modules/karma-source-map-support": { "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==", "dev": true, + "license": "MIT", "dependencies": { "source-map-support": "^0.5.5" } }, "node_modules/killable": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/killable/-/killable-1.0.1.tgz", - "integrity": "sha512-LzqtLKlUwirEUyl/nicirVmNiPvYs7l5n8wOPP7fyJVpUPkvCnW/vuiXGpylGUlnPDnB7311rARzAt3Mhswpjg==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/kind-of": { "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/klona": { "version": "2.0.4", - "resolved": "https://registry.npmjs.org/klona/-/klona-2.0.4.tgz", - "integrity": "sha512-ZRbnvdg/NxqzC7L9Uyqzf4psi1OM4Cuc+sJAkQPjO6XkQIJTNbfK2Rsmbw8fx1p2mkZdp2FZYo2+LwXYY/uwIA==", "dev": true, + "license": "MIT", "engines": { "node": ">= 8" } }, "node_modules/less": { - "version": "3.12.2", - "resolved": "https://registry.npmjs.org/less/-/less-3.12.2.tgz", - "integrity": "sha512-+1V2PCMFkL+OIj2/HrtrvZw0BC0sYLMICJfbQjuj/K8CEnlrFX6R5cKKgzzttsZDHyxQNL1jqMREjKN3ja/E3Q==", + "version": "4.1.1", "dev": true, + "license": "Apache-2.0", "dependencies": { + "copy-anything": "^2.0.1", + "parse-node-version": "^1.0.1", "tslib": "^1.10.0" }, "bin": { @@ -9365,15 +7923,14 @@ "image-size": "~0.5.0", "make-dir": "^2.1.0", "mime": "^1.4.1", - "native-request": "^1.0.5", + "needle": "^2.5.2", "source-map": "~0.6.0" } }, "node_modules/less-loader": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/less-loader/-/less-loader-7.0.2.tgz", - "integrity": "sha512-7MKlgjnkCf63E3Lv6w2FvAEgLMx3d/tNBExITcanAq7ys5U8VPWT3F6xcRjYmdNfkoQ9udoVFb1r2azSiTnD6w==", + "version": "7.3.0", "dev": true, + "license": "MIT", "dependencies": { "klona": "^2.0.4", "loader-utils": "^2.0.0", @@ -9387,17 +7944,16 @@ "url": "https://opencollective.com/webpack" }, "peerDependencies": { - "less": "^3.5.0", + "less": "^3.5.0 || ^4.0.0", "webpack": "^4.0.0 || ^5.0.0" } }, "node_modules/less-loader/node_modules/schema-utils": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.0.0.tgz", - "integrity": "sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA==", + "version": "3.1.0", "dev": true, + "license": "MIT", "dependencies": { - "@types/json-schema": "^7.0.6", + "@types/json-schema": "^7.0.7", "ajv": "^6.12.5", "ajv-keywords": "^3.5.2" }, @@ -9409,50 +7965,101 @@ "url": "https://opencollective.com/webpack" } }, + "node_modules/less/node_modules/make-dir": { + "version": "2.1.0", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "pify": "^4.0.1", + "semver": "^5.6.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/less/node_modules/pify": { + "version": "4.0.1", + "dev": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/less/node_modules/semver": { + "version": "5.7.1", + "dev": true, + "license": "ISC", + "optional": true, + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/less/node_modules/source-map": { + "version": "0.6.1", + "dev": true, + "license": "BSD-3-Clause", + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/less/node_modules/tslib": { "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true + "dev": true, + "license": "0BSD" }, "node_modules/license-webpack-plugin": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/license-webpack-plugin/-/license-webpack-plugin-2.3.1.tgz", - "integrity": "sha512-yhqTmlYIEpZWA122lf6E0G8+rkn0AzoQ1OpzUKKs/lXUqG1plmGnwmkuuPlfggzJR5y6DLOdot/Tv00CC51CeQ==", + "version": "2.3.11", "dev": true, + "license": "ISC", "dependencies": { "@types/webpack-sources": "^0.1.5", "webpack-sources": "^1.2.0" } }, + "node_modules/license-webpack-plugin/node_modules/source-map": { + "version": "0.6.1", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/license-webpack-plugin/node_modules/webpack-sources": { + "version": "1.4.3", + "dev": true, + "license": "MIT", + "dependencies": { + "source-list-map": "^2.0.0", + "source-map": "~0.6.1" + } + }, "node_modules/lie": { "version": "3.1.1", - "resolved": "https://registry.npmjs.org/lie/-/lie-3.1.1.tgz", - "integrity": "sha1-mkNrLMd0bKWd56QfpGmz77dr2H4=", + "license": "MIT", "dependencies": { "immediate": "~3.0.5" } }, "node_modules/lines-and-columns": { "version": "1.1.6", - "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.1.6.tgz", - "integrity": "sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA=", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/loader-runner": { "version": "2.4.0", - "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-2.4.0.tgz", - "integrity": "sha512-Jsmr89RcXGIwivFY21FcRrisYZfvLMTWx5kOLc+JTxtpBOG6xML0vzbc6SEQG2FO9/4Fc3wW4LVcB5DmGflaRw==", "dev": true, + "license": "MIT", "engines": { "node": ">=4.3.0 <5.0.0 || >=5.10" } }, "node_modules/loader-utils": { "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==", "dev": true, + "license": "MIT", "dependencies": { "big.js": "^5.2.2", "emojis-list": "^3.0.0", @@ -9463,68 +8070,57 @@ } }, "node_modules/localforage": { - "version": "1.7.1", - "resolved": "https://registry.npmjs.org/localforage/-/localforage-1.7.1.tgz", - "integrity": "sha1-5JJ+BCMCuGTbMPMhHxO1xvDell0=", + "version": "1.9.0", + "license": "Apache-2.0", "dependencies": { "lie": "3.1.1" } }, - "node_modules/localforage-cordovasqlitedriver": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/localforage-cordovasqlitedriver/-/localforage-cordovasqlitedriver-1.7.0.tgz", - "integrity": "sha1-i5OVd1nuaI06WNW6fAR39sy1ODg=", - "dependencies": { - "localforage": ">=1.5.0" - } - }, "node_modules/locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "version": "5.0.0", + "dev": true, + "license": "MIT", "dependencies": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" + "p-locate": "^4.1.0" }, "engines": { - "node": ">=6" + "node": ">=8" } }, "node_modules/lodash": { - "version": "4.17.20", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz", - "integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==", - "dev": true + "version": "4.17.21", + "dev": true, + "license": "MIT" }, "node_modules/lodash.memoize": { "version": "4.1.2", - "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", - "integrity": "sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4=", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/lodash.uniq": { "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", - "integrity": "sha1-0CJTc662Uq3BvILklFM5qEJ1R3M=", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/log-symbols": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.0.0.tgz", - "integrity": "sha512-FN8JBzLx6CzeMrB0tg6pqlGU1wCrXW+ZXGH481kfsBqer0hToTIiHdjH4Mq8xJUbvATujKCvaREGWpGUionraA==", + "version": "4.1.0", "dev": true, + "license": "MIT", "dependencies": { - "chalk": "^4.0.0" + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" }, "engines": { "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/log-symbols/node_modules/ansi-styles": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, + "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, @@ -9536,10 +8132,9 @@ } }, "node_modules/log-symbols/node_modules/chalk": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", - "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", + "version": "4.1.1", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -9553,9 +8148,8 @@ }, "node_modules/log-symbols/node_modules/color-convert": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, + "license": "MIT", "dependencies": { "color-name": "~1.1.4" }, @@ -9565,24 +8159,21 @@ }, "node_modules/log-symbols/node_modules/color-name": { "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/log-symbols/node_modules/has-flag": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/log-symbols/node_modules/supports-color": { "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, + "license": "MIT", "dependencies": { "has-flag": "^4.0.0" }, @@ -9592,9 +8183,8 @@ }, "node_modules/loglevel": { "version": "1.7.1", - "resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.7.1.tgz", - "integrity": "sha512-Hesni4s5UkWkwCGJMQGAh71PaLUmKFM60dHvq0zi/vDhhrzuk+4GgNbTXJ12YYQJn6ZKBDNIjYcuQGKudvqrIw==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.6.0" }, @@ -9605,9 +8195,8 @@ }, "node_modules/lru-cache": { "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", "dev": true, + "license": "ISC", "dependencies": { "yallist": "^4.0.0" }, @@ -9617,46 +8206,43 @@ }, "node_modules/magic-string": { "version": "0.25.7", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.7.tgz", - "integrity": "sha512-4CrMT5DOHTDk4HYDlzmwu4FVCcIYI8gauveasrdCu2IKIFOJ3f0v/8MDGJCDL9oD2ppz/Av1b0Nj345H9M+XIA==", "dev": true, + "license": "MIT", "dependencies": { "sourcemap-codec": "^1.4.4" } }, "node_modules/make-dir": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", - "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", + "version": "3.1.0", "dev": true, + "license": "MIT", "dependencies": { - "pify": "^4.0.1", - "semver": "^5.6.0" + "semver": "^6.0.0" }, "engines": { - "node": ">=6" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/make-dir/node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "version": "6.3.0", "dev": true, + "license": "ISC", "bin": { - "semver": "bin/semver" + "semver": "bin/semver.js" } }, "node_modules/make-error": { "version": "1.3.6", - "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", - "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/make-fetch-happen": { "version": "8.0.14", - "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-8.0.14.tgz", - "integrity": "sha512-EsS89h6l4vbfJEtBZnENTOFk8mCRpY5ru36Xe5bcX1KYIli2mkSHqoFsp5O1wMDvTJJzxe/4THpCTtygjeeGWQ==", "dev": true, + "license": "ISC", "dependencies": { "agentkeepalive": "^4.1.3", "cacache": "^15.0.5", @@ -9680,15 +8266,13 @@ }, "node_modules/make-fetch-happen/node_modules/err-code": { "version": "2.0.3", - "resolved": "https://registry.npmjs.org/err-code/-/err-code-2.0.3.tgz", - "integrity": "sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/make-fetch-happen/node_modules/promise-retry": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/promise-retry/-/promise-retry-2.0.1.tgz", - "integrity": "sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==", "dev": true, + "license": "MIT", "dependencies": { "err-code": "^2.0.2", "retry": "^0.12.0" @@ -9697,20 +8281,26 @@ "node": ">=10" } }, + "node_modules/make-fetch-happen/node_modules/retry": { + "version": "0.12.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, "node_modules/map-cache": { "version": "0.2.2", - "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", - "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/map-visit": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", - "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", "dev": true, + "license": "MIT", "dependencies": { "object-visit": "^1.0.0" }, @@ -9719,20 +8309,19 @@ } }, "node_modules/marked": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/marked/-/marked-2.0.0.tgz", - "integrity": "sha512-NqRSh2+LlN2NInpqTQnS614Y/3NkVMFFU6sJlRFEpxJ/LHuK/qJECH7/fXZjk4VZstPW/Pevjil/VtSONsLc7Q==", + "version": "2.1.3", + "license": "MIT", "bin": { "marked": "bin/marked" }, "engines": { - "node": ">= 8.16.2" + "node": ">= 10" } }, "node_modules/md5.js": { "version": "1.3.5", - "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", - "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", + "dev": true, + "license": "MIT", "dependencies": { "hash-base": "^3.0.0", "inherits": "^2.0.1", @@ -9740,25 +8329,22 @@ } }, "node_modules/mdn-data": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.4.tgz", - "integrity": "sha512-iV3XNKw06j5Q7mi6h+9vbx23Tv7JkjEVgKHW4pimwyDGWm0OIQntJJ+u1C6mg6mK1EaTv42XQ7w76yuzH7M2cA==", - "dev": true + "version": "2.0.14", + "dev": true, + "license": "CC0-1.0" }, "node_modules/media-typer": { "version": "0.3.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.6" } }, "node_modules/memory-fs": { "version": "0.4.1", - "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.4.1.tgz", - "integrity": "sha1-OpoguEYlI+RHz7x+i7gO1me/xVI=", "dev": true, + "license": "MIT", "dependencies": { "errno": "^0.1.3", "readable-stream": "^2.0.1" @@ -9766,15 +8352,13 @@ }, "node_modules/memory-fs/node_modules/isarray": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/memory-fs/node_modules/readable-stream": { "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", "dev": true, + "license": "MIT", "dependencies": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", @@ -9785,83 +8369,72 @@ "util-deprecate": "~1.0.1" } }, - "node_modules/memory-fs/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, "node_modules/memory-fs/node_modules/string_decoder": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "dev": true, + "license": "MIT", "dependencies": { "safe-buffer": "~5.1.0" } }, "node_modules/merge-descriptors": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", - "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/merge-source-map": { "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==", "dev": true, + "license": "MIT", "dependencies": { "source-map": "^0.6.1" } }, + "node_modules/merge-source-map/node_modules/source-map": { + "version": "0.6.1", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/merge-stream": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/merge2": { "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", "dev": true, + "license": "MIT", "engines": { "node": ">= 8" } }, - "node_modules/merkle-lib": { - "version": "2.0.10", - "resolved": "https://registry.npmjs.org/merkle-lib/-/merkle-lib-2.0.10.tgz", - "integrity": "sha1-grjbrnXieneFOItz+ddyXQ9vMyY=" - }, "node_modules/methods": { "version": "1.1.2", - "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", - "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.6" } }, "node_modules/micromatch": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.2.tgz", - "integrity": "sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q==", + "version": "4.0.4", "dev": true, + "license": "MIT", "dependencies": { "braces": "^3.0.1", - "picomatch": "^2.0.5" + "picomatch": "^2.2.3" }, "engines": { - "node": ">=8" + "node": ">=8.6" } }, "node_modules/miller-rabin": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz", - "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", "dev": true, + "license": "MIT", "dependencies": { "bn.js": "^4.0.0", "brorand": "^1.0.1" @@ -9870,11 +8443,15 @@ "miller-rabin": "bin/miller-rabin" } }, + "node_modules/miller-rabin/node_modules/bn.js": { + "version": "4.12.0", + "dev": true, + "license": "MIT" + }, "node_modules/mime": { "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", "dev": true, + "license": "MIT", "bin": { "mime": "cli.js" }, @@ -9883,21 +8460,19 @@ } }, "node_modules/mime-db": { - "version": "1.44.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.44.0.tgz", - "integrity": "sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg==", + "version": "1.48.0", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.6" } }, "node_modules/mime-types": { - "version": "2.1.27", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.27.tgz", - "integrity": "sha512-JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w==", + "version": "2.1.31", "dev": true, + "license": "MIT", "dependencies": { - "mime-db": "1.44.0" + "mime-db": "1.48.0" }, "engines": { "node": ">= 0.6" @@ -9905,18 +8480,16 @@ }, "node_modules/mimic-fn": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } }, "node_modules/mini-css-extract-plugin": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-1.2.1.tgz", - "integrity": "sha512-G3yw7/TQaPfkuiR73MDcyiqhyP8SnbmLhUbpC76H+wtQxA6wfKhMCQOCb6wnPK0dQbjORAeOILQqEesg4/wF7A==", + "version": "1.3.5", "dev": true, + "license": "MIT", "dependencies": { "loader-utils": "^2.0.0", "schema-utils": "^3.0.0", @@ -9934,12 +8507,11 @@ } }, "node_modules/mini-css-extract-plugin/node_modules/schema-utils": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.0.0.tgz", - "integrity": "sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA==", + "version": "3.1.0", "dev": true, + "license": "MIT", "dependencies": { - "@types/json-schema": "^7.0.6", + "@types/json-schema": "^7.0.7", "ajv": "^6.12.5", "ajv-keywords": "^3.5.2" }, @@ -9951,21 +8523,37 @@ "url": "https://opencollective.com/webpack" } }, + "node_modules/mini-css-extract-plugin/node_modules/source-map": { + "version": "0.6.1", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/mini-css-extract-plugin/node_modules/webpack-sources": { + "version": "1.4.3", + "dev": true, + "license": "MIT", + "dependencies": { + "source-list-map": "^2.0.0", + "source-map": "~0.6.1" + } + }, "node_modules/minimalistic-assert": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", - "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==" + "dev": true, + "license": "ISC" }, "node_modules/minimalistic-crypto-utils": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", - "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=" + "dev": true, + "license": "MIT" }, "node_modules/minimatch": { "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", "dev": true, + "license": "ISC", "dependencies": { "brace-expansion": "^1.1.7" }, @@ -9975,14 +8563,12 @@ }, "node_modules/minimist": { "version": "1.2.5", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" + "license": "MIT" }, "node_modules/minipass": { "version": "3.1.3", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.1.3.tgz", - "integrity": "sha512-Mgd2GdMVzY+x3IJ+oHnVM+KG3lA5c8tnabyJKmHSaG2kAGpudxuOf8ToDkhumF7UzME7DecbQE9uOZhNm7PuJg==", "dev": true, + "license": "ISC", "dependencies": { "yallist": "^4.0.0" }, @@ -9992,9 +8578,8 @@ }, "node_modules/minipass-collect": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-1.0.2.tgz", - "integrity": "sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==", "dev": true, + "license": "ISC", "dependencies": { "minipass": "^3.0.0" }, @@ -10004,9 +8589,8 @@ }, "node_modules/minipass-fetch": { "version": "1.3.3", - "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-1.3.3.tgz", - "integrity": "sha512-akCrLDWfbdAWkMLBxJEeWTdNsjML+dt5YgOI4gJ53vuO0vrmYQkUPxa6j6V65s9CcePIr2SSWqjT2EcrNseryQ==", "dev": true, + "license": "MIT", "dependencies": { "minipass": "^3.1.0", "minipass-sized": "^1.0.3", @@ -10021,9 +8605,8 @@ }, "node_modules/minipass-flush": { "version": "1.0.5", - "resolved": "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz", - "integrity": "sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==", "dev": true, + "license": "ISC", "dependencies": { "minipass": "^3.0.0" }, @@ -10033,9 +8616,8 @@ }, "node_modules/minipass-json-stream": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minipass-json-stream/-/minipass-json-stream-1.0.1.tgz", - "integrity": "sha512-ODqY18UZt/I8k+b7rl2AENgbWE8IDYam+undIJONvigAz8KR5GWblsFTEfQs0WODsjbSXWlm+JHEv8Gr6Tfdbg==", "dev": true, + "license": "MIT", "dependencies": { "jsonparse": "^1.3.1", "minipass": "^3.0.0" @@ -10043,9 +8625,8 @@ }, "node_modules/minipass-pipeline": { "version": "1.2.4", - "resolved": "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz", - "integrity": "sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==", "dev": true, + "license": "ISC", "dependencies": { "minipass": "^3.0.0" }, @@ -10055,9 +8636,8 @@ }, "node_modules/minipass-sized": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/minipass-sized/-/minipass-sized-1.0.3.tgz", - "integrity": "sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g==", "dev": true, + "license": "ISC", "dependencies": { "minipass": "^3.0.0" }, @@ -10067,9 +8647,8 @@ }, "node_modules/minizlib": { "version": "2.1.2", - "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", - "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", "dev": true, + "license": "MIT", "dependencies": { "minipass": "^3.0.0", "yallist": "^4.0.0" @@ -10080,9 +8659,8 @@ }, "node_modules/mississippi": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/mississippi/-/mississippi-3.0.0.tgz", - "integrity": "sha512-x471SsVjUtBRtcvd4BzKE9kFC+/2TeWgKCgw0bZcw1b9l2X3QX5vCWgF+KaZaYm87Ss//rHnWryupDrgLvmSkA==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "concat-stream": "^1.5.0", "duplexify": "^3.4.2", @@ -10101,9 +8679,8 @@ }, "node_modules/mixin-deep": { "version": "1.3.2", - "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", - "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==", "dev": true, + "license": "MIT", "dependencies": { "for-in": "^1.0.2", "is-extendable": "^1.0.1" @@ -10112,35 +8689,21 @@ "node": ">=0.10.0" } }, - "node_modules/mixin-deep/node_modules/is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "dependencies": { - "is-plain-object": "^2.0.4" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/mkdirp": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", - "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", + "version": "1.0.4", "dev": true, - "dependencies": { - "minimist": "^1.2.5" - }, + "license": "MIT", "bin": { "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" } }, "node_modules/move-concurrently": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/move-concurrently/-/move-concurrently-1.0.1.tgz", - "integrity": "sha1-viwAX9oy4LKa8fBdfEszIUxwH5I=", "dev": true, + "license": "ISC", "dependencies": { "aproba": "^1.1.1", "copy-concurrently": "^1.0.0", @@ -10150,11 +8713,21 @@ "run-queue": "^1.0.3" } }, + "node_modules/move-concurrently/node_modules/mkdirp": { + "version": "0.5.5", + "dev": true, + "license": "MIT", + "dependencies": { + "minimist": "^1.2.5" + }, + "bin": { + "mkdirp": "bin/cmd.js" + } + }, "node_modules/move-concurrently/node_modules/rimraf": { "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", "dev": true, + "license": "ISC", "dependencies": { "glob": "^7.1.3" }, @@ -10164,15 +8737,13 @@ }, "node_modules/ms": { "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/multicast-dns": { "version": "6.2.3", - "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-6.2.3.tgz", - "integrity": "sha512-ji6J5enbMyGRHIAkAOu3WdV8nggqviKCEKtXcOqfphZZtQrmHKycfynJ2V7eVPUA4NhJ6V7Wf4TmGbTwKE9B6g==", "dev": true, + "license": "MIT", "dependencies": { "dns-packet": "^1.3.1", "thunky": "^1.0.2" @@ -10183,26 +8754,29 @@ }, "node_modules/multicast-dns-service-types": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/multicast-dns-service-types/-/multicast-dns-service-types-1.1.0.tgz", - "integrity": "sha1-iZ8R2WhuXgXLkbNdXw5jt3PPyQE=", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/mute-stream": { "version": "0.0.8", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", - "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", - "dev": true + "dev": true, + "license": "ISC" }, - "node_modules/nan": { - "version": "2.14.2", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.2.tgz", - "integrity": "sha512-M2ufzIiINKCuDfBSAUr1vWQ+vuVcA9kqx8JJUsbQi6yf1uGRyb7HfpdfUr5qLXf3B/t8dPvcjhKMmlfnP47EzQ==" + "node_modules/nanoid": { + "version": "3.1.23", + "dev": true, + "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } }, "node_modules/nanomatch": { "version": "1.2.13", - "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", - "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", "dev": true, + "license": "MIT", "dependencies": { "arr-diff": "^4.0.0", "array-unique": "^0.3.2", @@ -10220,53 +8794,61 @@ "node": ">=0.10.0" } }, - "node_modules/native-request": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/native-request/-/native-request-1.0.8.tgz", - "integrity": "sha512-vU2JojJVelUGp6jRcLwToPoWGxSx23z/0iX+I77J3Ht17rf2INGjrhOoQnjVo60nQd8wVsgzKkPfRXBiVdD2ag==", + "node_modules/needle": { + "version": "2.8.0", "dev": true, - "optional": true + "license": "MIT", + "optional": true, + "dependencies": { + "debug": "^3.2.6", + "iconv-lite": "^0.4.4", + "sax": "^1.2.4" + }, + "bin": { + "needle": "bin/needle" + }, + "engines": { + "node": ">= 4.4.x" + } + }, + "node_modules/needle/node_modules/debug": { + "version": "3.2.7", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "ms": "^2.1.1" + } }, "node_modules/negotiator": { "version": "0.6.2", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", - "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.6" } }, "node_modules/neo-async": { "version": "2.6.2", - "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", - "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==" - }, - "node_modules/next-tick": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.0.0.tgz", - "integrity": "sha1-yobR/ogoFpsBICCOPchCS524NCw=", - "dev": true + "license": "MIT" }, "node_modules/nice-try": { "version": "1.0.5", - "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", - "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/node-forge": { "version": "0.10.0", - "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.10.0.tgz", - "integrity": "sha512-PPmu8eEeG9saEUvI97fm4OYxXVB6bFvyNTyiUOBichBpFG8A1Ljw3bY62+5oOjDEMHRnd0Y7HQ+x7uzxOzC6JA==", "dev": true, + "license": "(BSD-3-Clause OR GPL-2.0)", "engines": { "node": ">= 6.0.0" } }, "node_modules/node-gyp": { "version": "7.1.2", - "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-7.1.2.tgz", - "integrity": "sha512-CbpcIo7C3eMu3dL1c3d0xw449fHIGALIJsRP4DDPHpyiW8vcriNY7ubh9TE4zEKfSxscY7PjeFnshE7h75ynjQ==", "dev": true, + "license": "MIT", "dependencies": { "env-paths": "^2.2.0", "glob": "^7.1.4", @@ -10286,35 +8868,115 @@ "node": ">= 10.12.0" } }, - "node_modules/node-gyp/node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "node_modules/node-html-parser": { + "version": "3.3.6", "dev": true, + "license": "MIT", "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" + "css-select": "^4.1.3", + "he": "1.2.0" } }, - "node_modules/node-html-parser": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/node-html-parser/-/node-html-parser-2.0.0.tgz", - "integrity": "sha512-3wJdYSxiVIBxuiFm9UtfNWAlBw2P+Vb/RN1nqf40q2JeZDpcJ1HsrWuWV3j15SSJ25TvfnOoac2Q+uDU9iY0sw==", + "node_modules/node-html-parser/node_modules/css-select": { + "version": "4.1.3", "dev": true, + "license": "BSD-2-Clause", "dependencies": { - "he": "1.2.0" + "boolbase": "^1.0.0", + "css-what": "^5.0.0", + "domhandler": "^4.2.0", + "domutils": "^2.6.0", + "nth-check": "^2.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/node-html-parser/node_modules/css-what": { + "version": "5.0.1", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">= 6" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/node-html-parser/node_modules/dom-serializer": { + "version": "1.3.2", + "dev": true, + "license": "MIT", + "dependencies": { + "domelementtype": "^2.0.1", + "domhandler": "^4.2.0", + "entities": "^2.0.0" + }, + "funding": { + "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" + } + }, + "node_modules/node-html-parser/node_modules/domelementtype": { + "version": "2.2.0", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "license": "BSD-2-Clause" + }, + "node_modules/node-html-parser/node_modules/domhandler": { + "version": "4.2.0", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "domelementtype": "^2.2.0" + }, + "engines": { + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" + } + }, + "node_modules/node-html-parser/node_modules/domutils": { + "version": "2.7.0", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "dom-serializer": "^1.0.1", + "domelementtype": "^2.2.0", + "domhandler": "^4.2.0" + }, + "funding": { + "url": "https://github.com/fb55/domutils?sponsor=1" + } + }, + "node_modules/node-html-parser/node_modules/entities": { + "version": "2.2.0", + "dev": true, + "license": "BSD-2-Clause", + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/node-html-parser/node_modules/nth-check": { + "version": "2.0.0", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "boolbase": "^1.0.0" + }, + "funding": { + "url": "https://github.com/fb55/nth-check?sponsor=1" } }, "node_modules/node-libs-browser": { "version": "2.2.1", - "resolved": "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-2.2.1.tgz", - "integrity": "sha512-h/zcD8H9kaDZ9ALUWwlBUDo6TKF8a7qBSCSEGfjTVIYeqsioSKaAX+BN7NgiMGp6iSIXZ3PxgCu8KS3b71YK5Q==", "dev": true, + "license": "MIT", "dependencies": { "assert": "^1.1.1", "browserify-zlib": "^0.2.0", @@ -10341,23 +9003,30 @@ "vm-browserify": "^1.0.1" } }, + "node_modules/node-libs-browser/node_modules/buffer": { + "version": "4.9.2", + "dev": true, + "license": "MIT", + "dependencies": { + "base64-js": "^1.0.2", + "ieee754": "^1.1.4", + "isarray": "^1.0.0" + } + }, "node_modules/node-libs-browser/node_modules/isarray": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/node-libs-browser/node_modules/punycode": { "version": "1.4.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", - "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/node-libs-browser/node_modules/readable-stream": { "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", "dev": true, + "license": "MIT", "dependencies": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", @@ -10368,32 +9037,23 @@ "util-deprecate": "~1.0.1" } }, - "node_modules/node-libs-browser/node_modules/readable-stream/node_modules/string_decoder": { + "node_modules/node-libs-browser/node_modules/string_decoder": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "dev": true, + "license": "MIT", "dependencies": { "safe-buffer": "~5.1.0" } }, - "node_modules/node-libs-browser/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, "node_modules/node-releases": { - "version": "1.1.67", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.67.tgz", - "integrity": "sha512-V5QF9noGFl3EymEwUYzO+3NTDpGfQB4ve6Qfnzf3UNydMhjQRVPR1DZTuvWiLzaFJYw2fmDwAfnRNEVb64hSIg==", - "dev": true + "version": "1.1.73", + "dev": true, + "license": "MIT" }, "node_modules/nopt": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz", - "integrity": "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==", "dev": true, + "license": "ISC", "dependencies": { "abbrev": "1" }, @@ -10406,45 +9066,43 @@ }, "node_modules/normalize-path": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/normalize-range": { "version": "0.1.2", - "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", - "integrity": "sha1-LRDAa9/TEuqXd2laTShDlFa3WUI=", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/normalize-url": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-3.3.0.tgz", - "integrity": "sha512-U+JJi7duF1o+u2pynbp2zXDW2/PADgC30f0GsHZtRh+HOcXHnw137TrNlyxxRvWW5fjKd3bcLHPxofWuCjaeZg==", + "version": "6.1.0", "dev": true, + "license": "MIT", "engines": { - "node": ">=6" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/npm-bundled": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-1.1.1.tgz", - "integrity": "sha512-gqkfgGePhTpAEgUsGEgcq1rqPXA+tv/aVBlgEzfXwA1yiUJF7xtEt3CtVwOjNYQOVknDk0F20w58Fnm3EtG0fA==", + "version": "1.1.2", "dev": true, + "license": "ISC", "dependencies": { "npm-normalize-package-bin": "^1.0.1" } }, "node_modules/npm-install-checks": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/npm-install-checks/-/npm-install-checks-4.0.0.tgz", - "integrity": "sha512-09OmyDkNLYwqKPOnbI8exiOZU2GVVmQp7tgez2BPi5OZC8M82elDAps7sxC4l//uSUtotWqoEIDwjRvWH4qz8w==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "semver": "^7.1.1" }, @@ -10454,15 +9112,13 @@ }, "node_modules/npm-normalize-package-bin": { "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==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/npm-package-arg": { "version": "8.1.0", - "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-8.1.0.tgz", - "integrity": "sha512-/ep6QDxBkm9HvOhOg0heitSd7JHA1U7y1qhhlRlteYYAi9Pdb/ZV7FW5aHpkrpM8+P+4p/jjR8zCyKPBMBjSig==", "dev": true, + "license": "ISC", "dependencies": { "hosted-git-info": "^3.0.6", "semver": "^7.0.0", @@ -10473,10 +9129,9 @@ } }, "node_modules/npm-packlist": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-2.1.4.tgz", - "integrity": "sha512-Qzg2pvXC9U4I4fLnUrBmcIT4x0woLtUgxUi9eC+Zrcv1Xx5eamytGAfbDWQ67j7xOcQ2VW1I3su9smVTIdu7Hw==", + "version": "2.2.2", "dev": true, + "license": "ISC", "dependencies": { "glob": "^7.1.6", "ignore-walk": "^3.0.3", @@ -10492,9 +9147,8 @@ }, "node_modules/npm-pick-manifest": { "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==", "dev": true, + "license": "ISC", "dependencies": { "npm-install-checks": "^4.0.0", "npm-package-arg": "^8.0.0", @@ -10503,9 +9157,8 @@ }, "node_modules/npm-registry-fetch": { "version": "9.0.0", - "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-9.0.0.tgz", - "integrity": "sha512-PuFYYtnQ8IyVl6ib9d3PepeehcUeHN9IO5N/iCRhyg9tStQcqGQBRVHmfmMWPDERU3KwZoHFvbJ4FPXPspvzbA==", "dev": true, + "license": "ISC", "dependencies": { "@npmcli/ci-detect": "^1.0.0", "lru-cache": "^6.0.0", @@ -10522,9 +9175,8 @@ }, "node_modules/npm-run-path": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", - "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", "dev": true, + "license": "MIT", "dependencies": { "path-key": "^2.0.0" }, @@ -10532,11 +9184,18 @@ "node": ">=4" } }, + "node_modules/npm-run-path/node_modules/path-key": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, "node_modules/npmlog": { "version": "4.1.2", - "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", - "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", "dev": true, + "license": "ISC", "dependencies": { "are-we-there-yet": "~1.1.2", "console-control-strings": "~1.1.0", @@ -10546,51 +9205,40 @@ }, "node_modules/nth-check": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.2.tgz", - "integrity": "sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "boolbase": "~1.0.0" } }, - "node_modules/num2fraction": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/num2fraction/-/num2fraction-1.2.2.tgz", - "integrity": "sha1-b2gragJ6Tp3fpFZM0lidHU5mnt4=", - "dev": true - }, "node_modules/number-is-nan": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", - "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/oauth-sign": { "version": "0.9.0", - "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", - "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", "dev": true, + "license": "Apache-2.0", "engines": { "node": "*" } }, "node_modules/object-assign": { "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/object-copy": { "version": "0.1.0", - "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", - "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", "dev": true, + "license": "MIT", "dependencies": { "copy-descriptor": "^0.1.0", "define-property": "^0.2.5", @@ -10602,9 +9250,8 @@ }, "node_modules/object-copy/node_modules/define-property": { "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", "dev": true, + "license": "MIT", "dependencies": { "is-descriptor": "^0.1.0" }, @@ -10612,11 +9259,53 @@ "node": ">=0.10.0" } }, + "node_modules/object-copy/node_modules/is-accessor-descriptor": { + "version": "0.1.6", + "dev": true, + "license": "MIT", + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-copy/node_modules/is-data-descriptor": { + "version": "0.1.4", + "dev": true, + "license": "MIT", + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-copy/node_modules/is-descriptor": { + "version": "0.1.6", + "dev": true, + "license": "MIT", + "dependencies": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-copy/node_modules/is-descriptor/node_modules/kind-of": { + "version": "5.1.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/object-copy/node_modules/kind-of": { "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, + "license": "MIT", "dependencies": { "is-buffer": "^1.1.5" }, @@ -10624,22 +9313,12 @@ "node": ">=0.10.0" } }, - "node_modules/object-inspect": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.9.0.tgz", - "integrity": "sha512-i3Bp9iTqwhaLZBxGkRfo5ZbE07BQRT7MGu8+nNgwW9ItGp1TzCTw2DLEoWwjClxBjOFI/hWljTAmYGCEwmtnOw==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/object-is": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.4.tgz", - "integrity": "sha512-1ZvAZ4wlF7IyPVOcE1Omikt7UpaFlOQq0HlSti+ZvDH3UiD2brwGMwDbyV43jao2bKJ+4+WdPJHSd7kgzKYVqg==", + "version": "1.1.5", "dev": true, + "license": "MIT", "dependencies": { - "call-bind": "^1.0.0", + "call-bind": "^1.0.2", "define-properties": "^1.1.3" }, "engines": { @@ -10651,18 +9330,16 @@ }, "node_modules/object-keys": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.4" } }, "node_modules/object-visit": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", - "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", "dev": true, + "license": "MIT", "dependencies": { "isobject": "^3.0.0" }, @@ -10672,9 +9349,8 @@ }, "node_modules/object.assign": { "version": "4.1.2", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", - "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.0", "define-properties": "^1.1.3", @@ -10688,28 +9364,10 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/object.getownpropertydescriptors": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.1.tgz", - "integrity": "sha512-6DtXgZ/lIZ9hqx4GtZETobXLR/ZLaa0aqV0kzbn80Rf8Z2e/XFnhA0I7p07N2wH8bBBltr2xQPi6sbKWAY2Eng==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.1" - }, - "engines": { - "node": ">= 0.8" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/object.pick": { "version": "1.3.0", - "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", - "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", "dev": true, + "license": "MIT", "dependencies": { "isobject": "^3.0.1" }, @@ -10717,35 +9375,15 @@ "node": ">=0.10.0" } }, - "node_modules/object.values": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.2.tgz", - "integrity": "sha512-MYC0jvJopr8EK6dPBiO8Nb9mvjdypOachO5REGk6MXzujbBrAisKo3HmdEI6kZDL6fC31Mwee/5YbtMebixeag==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.1", - "has": "^1.0.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/obuf": { "version": "1.1.2", - "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz", - "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/on-finished": { "version": "2.3.0", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", - "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", "dev": true, + "license": "MIT", "dependencies": { "ee-first": "1.1.1" }, @@ -10755,27 +9393,24 @@ }, "node_modules/on-headers": { "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==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.8" } }, "node_modules/once": { "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", "dev": true, + "license": "ISC", "dependencies": { "wrappy": "1" } }, "node_modules/onetime": { "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", "dev": true, + "license": "MIT", "dependencies": { "mimic-fn": "^2.1.0" }, @@ -10787,10 +9422,9 @@ } }, "node_modules/open": { - "version": "7.3.0", - "resolved": "https://registry.npmjs.org/open/-/open-7.3.0.tgz", - "integrity": "sha512-mgLwQIx2F/ye9SmbrUkurZCnkoXyXyu9EbHtJZrICjVAJfyMArdHp3KkixGdZx1ZHFPNIwl0DDM1dFFqXbTLZw==", + "version": "7.4.0", "dev": true, + "license": "MIT", "dependencies": { "is-docker": "^2.0.0", "is-wsl": "^2.1.1" @@ -10804,9 +9438,8 @@ }, "node_modules/opn": { "version": "5.5.0", - "resolved": "https://registry.npmjs.org/opn/-/opn-5.5.0.tgz", - "integrity": "sha512-PqHpggC9bLV0VeWcdKhkpxY+3JTzetLSqTCWL/z/tFIbI6G8JCjondXklT1JinczLz2Xib62sSp0T/gKT4KksA==", "dev": true, + "license": "MIT", "dependencies": { "is-wsl": "^1.1.0" }, @@ -10816,18 +9449,16 @@ }, "node_modules/opn/node_modules/is-wsl": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", - "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } }, "node_modules/ora": { "version": "5.3.0", - "resolved": "https://registry.npmjs.org/ora/-/ora-5.3.0.tgz", - "integrity": "sha512-zAKMgGXUim0Jyd6CXK9lraBnD3H5yPGBPPOkC23a2BG6hsm4Zu6OQSjQuEtV0BHDf4aKHcUFvJiGRrFuW3MG8g==", "dev": true, + "license": "MIT", "dependencies": { "bl": "^4.0.3", "chalk": "^4.1.0", @@ -10845,20 +9476,10 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/ora/node_modules/ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, "node_modules/ora/node_modules/ansi-styles": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, + "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, @@ -10870,10 +9491,9 @@ } }, "node_modules/ora/node_modules/chalk": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", - "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", + "version": "4.1.1", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -10887,9 +9507,8 @@ }, "node_modules/ora/node_modules/color-convert": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, + "license": "MIT", "dependencies": { "color-name": "~1.1.4" }, @@ -10899,36 +9518,21 @@ }, "node_modules/ora/node_modules/color-name": { "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/ora/node_modules/has-flag": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/ora/node_modules/strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", - "dev": true, - "dependencies": { - "ansi-regex": "^5.0.0" - }, + "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/ora/node_modules/supports-color": { "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, + "license": "MIT", "dependencies": { "has-flag": "^4.0.0" }, @@ -10938,41 +9542,62 @@ }, "node_modules/original": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/original/-/original-1.0.2.tgz", - "integrity": "sha512-hyBVl6iqqUOJ8FqRe+l/gS8H+kKYjrEndd5Pm1MfBtsEKA038HkkdbAl/72EAXGyonD/PFsvmVG+EvcIpliMBg==", "dev": true, + "license": "MIT", "dependencies": { "url-parse": "^1.4.3" } }, "node_modules/os-browserify": { "version": "0.3.0", - "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz", - "integrity": "sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc=", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/os-tmpdir": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/p-finally": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", - "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } }, "node_modules/p-limit": { + "version": "3.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "4.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/p-locate/node_modules/p-limit": { "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "license": "MIT", "dependencies": { "p-try": "^2.0.0" }, @@ -10983,22 +9608,10 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/p-locate": { - "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" - }, - "engines": { - "node": ">=6" - } - }, "node_modules/p-map": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", - "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", "dev": true, + "license": "MIT", "dependencies": { "aggregate-error": "^3.0.0" }, @@ -11011,9 +9624,8 @@ }, "node_modules/p-retry": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-3.0.1.tgz", - "integrity": "sha512-XE6G4+YTTkT2a0UWb2kjZe8xNwf8bIbnqpc/IS/idOBVhyves0mK5OJgeocjx7q5pvX/6m23xuzVPYT1uGM73w==", "dev": true, + "license": "MIT", "dependencies": { "retry": "^0.12.0" }, @@ -11021,19 +9633,25 @@ "node": ">=6" } }, + "node_modules/p-retry/node_modules/retry": { + "version": "0.12.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, "node_modules/p-try": { "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "license": "MIT", "engines": { "node": ">=6" } }, "node_modules/pacote": { "version": "11.2.4", - "resolved": "https://registry.npmjs.org/pacote/-/pacote-11.2.4.tgz", - "integrity": "sha512-GfTeVQGJ6WyBQbQD4t3ocHbyOmTQLmWjkCKSZPmKiGFKYKNUaM5U2gbLzUW8WG1XmS9yQFnsTFA0k3o1+q4klQ==", "dev": true, + "license": "ISC", "dependencies": { "@npmcli/git": "^2.0.1", "@npmcli/installed-package-contents": "^1.0.5", @@ -11062,29 +9680,15 @@ "node": ">=10" } }, - "node_modules/pacote/node_modules/mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "dev": true, - "bin": { - "mkdirp": "bin/cmd.js" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/pako": { "version": "1.0.11", - "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", - "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==", - "dev": true + "dev": true, + "license": "(MIT AND Zlib)" }, "node_modules/parallel-transform": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/parallel-transform/-/parallel-transform-1.2.0.tgz", - "integrity": "sha512-P2vSmIu38uIlvdcU7fDkyrxj33gTUy/ABO5ZUbGowxNCopBq/OoD42bP4UmMrJoPyk4Uqf0mu3mtWBhHCZD8yg==", "dev": true, + "license": "MIT", "dependencies": { "cyclist": "^1.0.1", "inherits": "^2.0.3", @@ -11093,15 +9697,13 @@ }, "node_modules/parallel-transform/node_modules/isarray": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/parallel-transform/node_modules/readable-stream": { "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", "dev": true, + "license": "MIT", "dependencies": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", @@ -11112,26 +9714,18 @@ "util-deprecate": "~1.0.1" } }, - "node_modules/parallel-transform/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, "node_modules/parallel-transform/node_modules/string_decoder": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "dev": true, + "license": "MIT", "dependencies": { "safe-buffer": "~5.1.0" } }, "node_modules/parent-module": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", - "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", "dev": true, + "license": "MIT", "dependencies": { "callsites": "^3.0.0" }, @@ -11139,20 +9733,10 @@ "node": ">=6" } }, - "node_modules/parent-module/node_modules/callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "dev": true, - "engines": { - "node": ">=6" - } - }, "node_modules/parse-asn1": { "version": "5.1.6", - "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.6.tgz", - "integrity": "sha512-RnZRo1EPU6JBnra2vGHj0yhp6ebyjBZpmUCLHWiFhxlzvBCCpAuZ7elsBp1PVAbQN0/04VD/19rfzlBSwLstMw==", "dev": true, + "license": "ISC", "dependencies": { "asn1.js": "^5.2.0", "browserify-aes": "^1.0.0", @@ -11162,450 +9746,9 @@ } }, "node_modules/parse-json": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", - "dev": true, - "dependencies": { - "error-ex": "^1.3.1", - "json-parse-better-errors": "^1.0.1" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/parse5": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", - "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==", - "dev": true - }, - "node_modules/parse5-html-rewriting-stream": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/parse5-html-rewriting-stream/-/parse5-html-rewriting-stream-6.0.1.tgz", - "integrity": "sha512-vwLQzynJVEfUlURxgnf51yAJDQTtVpNyGD8tKi2Za7m+akukNHxCcUQMAa/mUGLhCeicFdpy7Tlvj8ZNKadprg==", - "dev": true, - "dependencies": { - "parse5": "^6.0.1", - "parse5-sax-parser": "^6.0.1" - } - }, - "node_modules/parse5-sax-parser": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/parse5-sax-parser/-/parse5-sax-parser-6.0.1.tgz", - "integrity": "sha512-kXX+5S81lgESA0LsDuGjAlBybImAChYRMT+/uKCEXFBFOeEhS52qUCydGhU3qLRD8D9DVjaUo821WK7DM4iCeg==", - "dev": true, - "dependencies": { - "parse5": "^6.0.1" - } - }, - "node_modules/parseurl": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", - "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", - "dev": true, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/pascalcase": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", - "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/path-browserify": { - "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==", - "dev": true - }, - "node_modules/path-dirname": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", - "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=", - "dev": true - }, - "node_modules/path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", - "engines": { - "node": ">=4" - } - }, - "node_modules/path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/path-is-inside": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", - "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=", - "dev": true - }, - "node_modules/path-key": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/path-parse": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", - "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==", - "dev": true - }, - "node_modules/path-to-regexp": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", - "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=", - "dev": true - }, - "node_modules/path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/pbkdf2": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.1.tgz", - "integrity": "sha512-4Ejy1OPxi9f2tt1rRV7Go7zmfDQ+ZectEQz3VGUQhgq62HtIRPDyG/JtnwIxs6x3uNMwo2V7q1fMvKjb+Tnpqg==", - "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" - }, - "engines": { - "node": ">=0.12" - } - }, - "node_modules/performance-now": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", - "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=", - "dev": true - }, - "node_modules/picomatch": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.2.tgz", - "integrity": "sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==", - "dev": true, - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/pify": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", - "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/pinkie": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", - "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/pinkie-promise": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", - "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", - "dev": true, - "dependencies": { - "pinkie": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/pkg-dir": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", - "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", - "dev": true, - "dependencies": { - "find-up": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/pngjs": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/pngjs/-/pngjs-3.4.0.tgz", - "integrity": "sha512-NCrCHhWmnQklfH4MtJMRjZ2a8c80qXeMlQMv2uVp9ISJMTt562SbGd6n2oq0PaPgKm7Z6pL9E2UlLIhC+SHL3w==", - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/pnp-webpack-plugin": { - "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==", - "dev": true, - "dependencies": { - "ts-pnp": "^1.1.6" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/portfinder": { - "version": "1.0.28", - "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.28.tgz", - "integrity": "sha512-Se+2isanIcEqf2XMHjyUKskczxbPH7dQnlMjXX6+dybayyHvAf/TCgyMRlzf/B6QDhAEFOGes0pzRo3by4AbMA==", - "dev": true, - "dependencies": { - "async": "^2.6.2", - "debug": "^3.1.1", - "mkdirp": "^0.5.5" - }, - "engines": { - "node": ">= 0.12.0" - } - }, - "node_modules/portfinder/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, - "dependencies": { - "ms": "^2.1.1" - } - }, - "node_modules/posix-character-classes": { - "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=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/postcss": { - "version": "7.0.32", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.32.tgz", - "integrity": "sha512-03eXong5NLnNCD05xscnGKGDZ98CyzoqPSMjOe6SuoQY7Z2hIj0Ld1g/O/UQRuOle2aRtiIRDg9tDcTGAkLfKw==", - "dev": true, - "dependencies": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - }, - "engines": { - "node": ">=6.0.0" - }, - "funding": { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/postcss" - } - }, - "node_modules/postcss-calc": { - "version": "7.0.5", - "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-7.0.5.tgz", - "integrity": "sha512-1tKHutbGtLtEZF6PT4JSihCHfIVldU72mZ8SdZHIYriIZ9fh9k9aWSppaT8rHsyI3dX+KSR+W+Ix9BMY3AODrg==", - "dev": true, - "dependencies": { - "postcss": "^7.0.27", - "postcss-selector-parser": "^6.0.2", - "postcss-value-parser": "^4.0.2" - } - }, - "node_modules/postcss-colormin": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-4.0.3.tgz", - "integrity": "sha512-WyQFAdDZpExQh32j0U0feWisZ0dmOtPl44qYmJKkq9xFWY3p+4qnRzCHeNrkeRhwPHz9bQ3mo0/yVkaply0MNw==", - "dev": true, - "dependencies": { - "browserslist": "^4.0.0", - "color": "^3.0.0", - "has": "^1.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/postcss-colormin/node_modules/postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", - "dev": true - }, - "node_modules/postcss-convert-values": { - "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==", - "dev": true, - "dependencies": { - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/postcss-convert-values/node_modules/postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", - "dev": true - }, - "node_modules/postcss-discard-comments": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-4.0.2.tgz", - "integrity": "sha512-RJutN259iuRf3IW7GZyLM5Sw4GLTOH8FmsXBnv8Ab/Tc2k4SR4qbV4DNbyyY4+Sjo362SyDmW2DQ7lBSChrpkg==", - "dev": true, - "dependencies": { - "postcss": "^7.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/postcss-discard-duplicates": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-4.0.2.tgz", - "integrity": "sha512-ZNQfR1gPNAiXZhgENFfEglF93pciw0WxMkJeVmw8eF+JZBbMD7jp6C67GqJAXVZP2BWbOztKfbsdmMp/k8c6oQ==", - "dev": true, - "dependencies": { - "postcss": "^7.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/postcss-discard-empty": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-4.0.1.tgz", - "integrity": "sha512-B9miTzbznhDjTfjvipfHoqbWKwd0Mj+/fL5s1QOz06wufguil+Xheo4XpOnc4NqKYBCNqqEzgPv2aPBIJLox0w==", - "dev": true, - "dependencies": { - "postcss": "^7.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/postcss-discard-overridden": { - "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==", - "dev": true, - "dependencies": { - "postcss": "^7.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/postcss-import": { - "version": "12.0.1", - "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-12.0.1.tgz", - "integrity": "sha512-3Gti33dmCjyKBgimqGxL3vcV8w9+bsHwO5UrBawp796+jdardbcFl4RP5w/76BwNL7aGzpKstIfF9I+kdE8pTw==", - "dev": true, - "dependencies": { - "postcss": "^7.0.1", - "postcss-value-parser": "^3.2.3", - "read-cache": "^1.0.0", - "resolve": "^1.1.7" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/postcss-import/node_modules/postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", - "dev": true - }, - "node_modules/postcss-loader": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-4.0.4.tgz", - "integrity": "sha512-pntA9zIR14drQo84yGTjQJg1m7T0DkXR4vXYHBngiRZdJtEeCrojL6lOpqUanMzG375lIJbT4Yug85zC/AJWGw==", - "dev": true, - "dependencies": { - "cosmiconfig": "^7.0.0", - "klona": "^2.0.4", - "loader-utils": "^2.0.0", - "schema-utils": "^3.0.0", - "semver": "^7.3.2" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "postcss": "^7.0.0 || ^8.0.1", - "webpack": "^4.0.0 || ^5.0.0" - } - }, - "node_modules/postcss-loader/node_modules/cosmiconfig": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.0.tgz", - "integrity": "sha512-pondGvTuVYDk++upghXJabWzL6Kxu6f26ljFw64Swq9v6sQPUL3EUlVDV56diOjpCayKihL6hVe8exIACU4XcA==", - "dev": true, - "dependencies": { - "@types/parse-json": "^4.0.0", - "import-fresh": "^3.2.1", - "parse-json": "^5.0.0", - "path-type": "^4.0.0", - "yaml": "^1.10.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/postcss-loader/node_modules/import-fresh": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.2.2.tgz", - "integrity": "sha512-cTPNrlvJT6twpYy+YmKUKrTSjWFs3bjYjAhCwm+z4EOCubZxAuO+hHpRN64TqjEaYSHs7tJAE0w1CKMGmsG/lw==", - "dev": true, - "dependencies": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/postcss-loader/node_modules/parse-json": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.1.0.tgz", - "integrity": "sha512-+mi/lmVVNKFNVyLXV31ERiy2CY5E1/F6QtJFEzoChPRwwngMNXRDQ9GJ5WdE2Z2P4AujsOi0/+2qHID68KwfIQ==", + "version": "5.2.0", "dev": true, + "license": "MIT", "dependencies": { "@babel/code-frame": "^7.0.0", "error-ex": "^1.3.1", @@ -11619,22 +9762,415 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/postcss-loader/node_modules/resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "node_modules/parse-node-version": { + "version": "1.0.1", "dev": true, + "license": "MIT", "engines": { - "node": ">=4" + "node": ">= 0.10" + } + }, + "node_modules/parse5": { + "version": "3.0.3", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/parse5-html-rewriting-stream": { + "version": "6.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "parse5": "^6.0.1", + "parse5-sax-parser": "^6.0.1" + } + }, + "node_modules/parse5-html-rewriting-stream/node_modules/parse5": { + "version": "6.0.1", + "dev": true, + "license": "MIT" + }, + "node_modules/parse5-htmlparser2-tree-adapter": { + "version": "6.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "parse5": "^6.0.1" + } + }, + "node_modules/parse5-htmlparser2-tree-adapter/node_modules/parse5": { + "version": "6.0.1", + "dev": true, + "license": "MIT" + }, + "node_modules/parse5-sax-parser": { + "version": "6.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "parse5": "^6.0.1" + } + }, + "node_modules/parse5-sax-parser/node_modules/parse5": { + "version": "6.0.1", + "dev": true, + "license": "MIT" + }, + "node_modules/parseurl": { + "version": "1.3.3", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/pascalcase": { + "version": "0.1.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/patch-db-client": { + "resolved": "../../patch-db-client", + "link": true + }, + "node_modules/path-browserify": { + "version": "0.0.1", + "dev": true, + "license": "MIT" + }, + "node_modules/path-dirname": { + "version": "1.0.2", + "dev": true, + "license": "MIT" + }, + "node_modules/path-exists": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-is-inside": { + "version": "1.0.2", + "dev": true, + "license": "(WTFPL OR MIT)" + }, + "node_modules/path-key": { + "version": "3.1.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "dev": true, + "license": "MIT" + }, + "node_modules/path-to-regexp": { + "version": "0.1.7", + "dev": true, + "license": "MIT" + }, + "node_modules/path-type": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/pbkdf2": { + "version": "3.1.2", + "dev": true, + "license": "MIT", + "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" + }, + "engines": { + "node": ">=0.12" + } + }, + "node_modules/performance-now": { + "version": "2.1.0", + "dev": true, + "license": "MIT" + }, + "node_modules/picomatch": { + "version": "2.3.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pify": { + "version": "2.3.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pinkie": { + "version": "2.0.4", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pinkie-promise": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "pinkie": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pkg-dir": { + "version": "4.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "find-up": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pngjs": { + "version": "3.4.0", + "license": "MIT", + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/pnp-webpack-plugin": { + "version": "1.6.4", + "dev": true, + "license": "MIT", + "dependencies": { + "ts-pnp": "^1.1.6" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/portfinder": { + "version": "1.0.28", + "dev": true, + "license": "MIT", + "dependencies": { + "async": "^2.6.2", + "debug": "^3.1.1", + "mkdirp": "^0.5.5" + }, + "engines": { + "node": ">= 0.12.0" + } + }, + "node_modules/portfinder/node_modules/debug": { + "version": "3.2.7", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/portfinder/node_modules/mkdirp": { + "version": "0.5.5", + "dev": true, + "license": "MIT", + "dependencies": { + "minimist": "^1.2.5" + }, + "bin": { + "mkdirp": "bin/cmd.js" + } + }, + "node_modules/posix-character-classes": { + "version": "0.1.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/postcss": { + "version": "8.2.15", + "dev": true, + "license": "MIT", + "dependencies": { + "colorette": "^1.2.2", + "nanoid": "^3.1.23", + "source-map": "^0.6.1" + }, + "engines": { + "node": "^10 || ^12 || >=14" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + } + }, + "node_modules/postcss-calc": { + "version": "8.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "postcss-selector-parser": "^6.0.2", + "postcss-value-parser": "^4.0.2" + }, + "peerDependencies": { + "postcss": "^8.2.2" + } + }, + "node_modules/postcss-colormin": { + "version": "5.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "browserslist": "^4.16.6", + "caniuse-api": "^3.0.0", + "colord": "^2.0.1", + "postcss-value-parser": "^4.1.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-convert-values": { + "version": "5.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.1.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-discard-comments": { + "version": "5.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-discard-duplicates": { + "version": "5.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-discard-empty": { + "version": "5.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-discard-overridden": { + "version": "5.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-import": { + "version": "14.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.0.0", + "read-cache": "^1.0.0", + "resolve": "^1.1.7" + }, + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "postcss": "^8.0.0" + } + }, + "node_modules/postcss-loader": { + "version": "4.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "cosmiconfig": "^7.0.0", + "klona": "^2.0.4", + "loader-utils": "^2.0.0", + "schema-utils": "^3.0.0", + "semver": "^7.3.4" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "postcss": "^7.0.0 || ^8.0.1", + "webpack": "^4.0.0 || ^5.0.0" } }, "node_modules/postcss-loader/node_modules/schema-utils": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.0.0.tgz", - "integrity": "sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA==", + "version": "3.1.0", "dev": true, + "license": "MIT", "dependencies": { - "@types/json-schema": "^7.0.6", + "@types/json-schema": "^7.0.7", "ajv": "^6.12.5", "ajv-keywords": "^3.5.2" }, @@ -11647,438 +10183,337 @@ } }, "node_modules/postcss-merge-longhand": { - "version": "4.0.11", - "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-4.0.11.tgz", - "integrity": "sha512-alx/zmoeXvJjp7L4mxEMjh8lxVlDFX1gqWHzaaQewwMZiVhLo42TEClKaeHbRf6J7j82ZOdTJ808RtN0ZOZwvw==", + "version": "5.0.2", "dev": true, + "license": "MIT", "dependencies": { - "css-color-names": "0.0.4", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0", - "stylehacks": "^4.0.0" + "css-color-names": "^1.0.1", + "postcss-value-parser": "^4.1.0", + "stylehacks": "^5.0.1" }, "engines": { - "node": ">=6.9.0" + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, - "node_modules/postcss-merge-longhand/node_modules/postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", - "dev": true - }, "node_modules/postcss-merge-rules": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-4.0.3.tgz", - "integrity": "sha512-U7e3r1SbvYzO0Jr3UT/zKBVgYYyhAz0aitvGIYOYK5CPmkNih+WDSsS5tvPrJ8YMQYlEMvsZIiqmn7HdFUaeEQ==", + "version": "5.0.2", "dev": true, + "license": "MIT", "dependencies": { - "browserslist": "^4.0.0", + "browserslist": "^4.16.6", "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" + "cssnano-utils": "^2.0.1", + "postcss-selector-parser": "^6.0.5", + "vendors": "^1.0.3" }, "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/postcss-merge-rules/node_modules/postcss-selector-parser": { - "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==", - "dev": true, - "dependencies": { - "dot-prop": "^5.2.0", - "indexes-of": "^1.0.1", - "uniq": "^1.0.1" + "node": "^10 || ^12 || >=14.0" }, - "engines": { - "node": ">=8" + "peerDependencies": { + "postcss": "^8.2.15" } }, "node_modules/postcss-minify-font-values": { - "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==", + "version": "5.0.1", "dev": true, + "license": "MIT", "dependencies": { - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" + "postcss-value-parser": "^4.1.0" }, "engines": { - "node": ">=6.9.0" + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, - "node_modules/postcss-minify-font-values/node_modules/postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", - "dev": true - }, "node_modules/postcss-minify-gradients": { - "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==", + "version": "5.0.1", "dev": true, + "license": "MIT", "dependencies": { - "cssnano-util-get-arguments": "^4.0.0", - "is-color-stop": "^1.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" + "cssnano-utils": "^2.0.1", + "is-color-stop": "^1.1.0", + "postcss-value-parser": "^4.1.0" }, "engines": { - "node": ">=6.9.0" + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, - "node_modules/postcss-minify-gradients/node_modules/postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", - "dev": true - }, "node_modules/postcss-minify-params": { - "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==", + "version": "5.0.1", "dev": true, + "license": "MIT", "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", + "alphanum-sort": "^1.0.2", + "browserslist": "^4.16.0", + "cssnano-utils": "^2.0.1", + "postcss-value-parser": "^4.1.0", "uniqs": "^2.0.0" }, "engines": { - "node": ">=6.9.0" + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, - "node_modules/postcss-minify-params/node_modules/postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", - "dev": true - }, "node_modules/postcss-minify-selectors": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-4.0.2.tgz", - "integrity": "sha512-D5S1iViljXBj9kflQo4YutWnJmwm8VvIsU1GeXJGiG9j8CIg9zs4voPMdQDUmIxetUOh60VilsNzCiAFTOqu3g==", + "version": "5.1.0", "dev": true, + "license": "MIT", "dependencies": { - "alphanum-sort": "^1.0.0", - "has": "^1.0.0", - "postcss": "^7.0.0", - "postcss-selector-parser": "^3.0.0" + "alphanum-sort": "^1.0.2", + "postcss-selector-parser": "^6.0.5" }, "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/postcss-minify-selectors/node_modules/postcss-selector-parser": { - "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==", - "dev": true, - "dependencies": { - "dot-prop": "^5.2.0", - "indexes-of": "^1.0.1", - "uniq": "^1.0.1" + "node": "^10 || ^12 || >=14.0" }, - "engines": { - "node": ">=8" + "peerDependencies": { + "postcss": "^8.2.15" } }, "node_modules/postcss-modules-extract-imports": { - "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==", + "version": "3.0.0", "dev": true, - "dependencies": { - "postcss": "^7.0.5" - }, + "license": "ISC", "engines": { - "node": ">= 6" + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" } }, "node_modules/postcss-modules-local-by-default": { - "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==", + "version": "4.0.0", "dev": true, + "license": "MIT", "dependencies": { - "icss-utils": "^4.1.1", - "postcss": "^7.0.32", + "icss-utils": "^5.0.0", "postcss-selector-parser": "^6.0.2", "postcss-value-parser": "^4.1.0" }, "engines": { - "node": ">= 6" + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" } }, "node_modules/postcss-modules-scope": { - "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==", + "version": "3.0.0", "dev": true, + "license": "ISC", "dependencies": { - "postcss": "^7.0.6", - "postcss-selector-parser": "^6.0.0" + "postcss-selector-parser": "^6.0.4" }, "engines": { - "node": ">= 6" + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" } }, "node_modules/postcss-modules-values": { - "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==", + "version": "4.0.0", "dev": true, + "license": "ISC", "dependencies": { - "icss-utils": "^4.0.0", - "postcss": "^7.0.6" + "icss-utils": "^5.0.0" + }, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" } }, "node_modules/postcss-normalize-charset": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-4.0.1.tgz", - "integrity": "sha512-gMXCrrlWh6G27U0hF3vNvR3w8I1s2wOBILvA87iNXaPvSNo5uZAMYsZG7XjCUf1eVxuPfyL4TJ7++SGZLc9A3g==", + "version": "5.0.1", "dev": true, - "dependencies": { - "postcss": "^7.0.0" - }, + "license": "MIT", "engines": { - "node": ">=6.9.0" + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, "node_modules/postcss-normalize-display-values": { - "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==", + "version": "5.0.1", "dev": true, + "license": "MIT", "dependencies": { - "cssnano-util-get-match": "^4.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" + "cssnano-utils": "^2.0.1", + "postcss-value-parser": "^4.1.0" }, "engines": { - "node": ">=6.9.0" + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, - "node_modules/postcss-normalize-display-values/node_modules/postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", - "dev": true - }, "node_modules/postcss-normalize-positions": { - "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==", + "version": "5.0.1", "dev": true, + "license": "MIT", "dependencies": { - "cssnano-util-get-arguments": "^4.0.0", - "has": "^1.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" + "postcss-value-parser": "^4.1.0" }, "engines": { - "node": ">=6.9.0" + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, - "node_modules/postcss-normalize-positions/node_modules/postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", - "dev": true - }, "node_modules/postcss-normalize-repeat-style": { - "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==", + "version": "5.0.1", "dev": true, + "license": "MIT", "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" + "cssnano-utils": "^2.0.1", + "postcss-value-parser": "^4.1.0" }, "engines": { - "node": ">=6.9.0" + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, - "node_modules/postcss-normalize-repeat-style/node_modules/postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", - "dev": true - }, "node_modules/postcss-normalize-string": { - "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==", + "version": "5.0.1", "dev": true, + "license": "MIT", "dependencies": { - "has": "^1.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" + "postcss-value-parser": "^4.1.0" }, "engines": { - "node": ">=6.9.0" + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, - "node_modules/postcss-normalize-string/node_modules/postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", - "dev": true - }, "node_modules/postcss-normalize-timing-functions": { - "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==", + "version": "5.0.1", "dev": true, + "license": "MIT", "dependencies": { - "cssnano-util-get-match": "^4.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" + "cssnano-utils": "^2.0.1", + "postcss-value-parser": "^4.1.0" }, "engines": { - "node": ">=6.9.0" + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, - "node_modules/postcss-normalize-timing-functions/node_modules/postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", - "dev": true - }, "node_modules/postcss-normalize-unicode": { - "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==", + "version": "5.0.1", "dev": true, + "license": "MIT", "dependencies": { - "browserslist": "^4.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" + "browserslist": "^4.16.0", + "postcss-value-parser": "^4.1.0" }, "engines": { - "node": ">=6.9.0" + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, - "node_modules/postcss-normalize-unicode/node_modules/postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", - "dev": true - }, "node_modules/postcss-normalize-url": { - "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==", + "version": "5.0.2", "dev": true, + "license": "MIT", "dependencies": { - "is-absolute-url": "^2.0.0", - "normalize-url": "^3.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" + "is-absolute-url": "^3.0.3", + "normalize-url": "^6.0.1", + "postcss-value-parser": "^4.1.0" }, "engines": { - "node": ">=6.9.0" + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, - "node_modules/postcss-normalize-url/node_modules/postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", - "dev": true - }, "node_modules/postcss-normalize-whitespace": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-4.0.2.tgz", - "integrity": "sha512-tO8QIgrsI3p95r8fyqKV+ufKlSHh9hMJqACqbv2XknufqEDhDvbguXGBBqxw9nsQoXWf0qOqppziKJKHMD4GtA==", + "version": "5.0.1", "dev": true, + "license": "MIT", "dependencies": { - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" + "postcss-value-parser": "^4.1.0" }, "engines": { - "node": ">=6.9.0" + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, - "node_modules/postcss-normalize-whitespace/node_modules/postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", - "dev": true - }, "node_modules/postcss-ordered-values": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-4.1.2.tgz", - "integrity": "sha512-2fCObh5UanxvSxeXrtLtlwVThBvHn6MQcu4ksNT2tsaV2Fg76R2CV98W7wNSlX+5/pFwEyaDwKLLoEV7uRybAw==", + "version": "5.0.2", "dev": true, + "license": "MIT", "dependencies": { - "cssnano-util-get-arguments": "^4.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" + "cssnano-utils": "^2.0.1", + "postcss-value-parser": "^4.1.0" }, "engines": { - "node": ">=6.9.0" + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, - "node_modules/postcss-ordered-values/node_modules/postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", - "dev": true - }, "node_modules/postcss-reduce-initial": { - "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==", + "version": "5.0.1", "dev": true, + "license": "MIT", "dependencies": { - "browserslist": "^4.0.0", - "caniuse-api": "^3.0.0", - "has": "^1.0.0", - "postcss": "^7.0.0" + "browserslist": "^4.16.0", + "caniuse-api": "^3.0.0" }, "engines": { - "node": ">=6.9.0" + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, "node_modules/postcss-reduce-transforms": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-4.0.2.tgz", - "integrity": "sha512-EEVig1Q2QJ4ELpJXMZR8Vt5DQx8/mo+dGWSR7vWXqcob2gQLyQGsionYcGKATXvQzMPn6DSN1vTN7yFximdIAg==", + "version": "5.0.1", "dev": true, + "license": "MIT", "dependencies": { - "cssnano-util-get-match": "^4.0.0", - "has": "^1.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" + "cssnano-utils": "^2.0.1", + "postcss-value-parser": "^4.1.0" }, "engines": { - "node": ">=6.9.0" + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, - "node_modules/postcss-reduce-transforms/node_modules/postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", - "dev": true - }, "node_modules/postcss-selector-parser": { - "version": "6.0.4", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.4.tgz", - "integrity": "sha512-gjMeXBempyInaBqpp8gODmwZ52WaYsVOsfr4L4lDQ7n3ncD6mEyySiDtgzCT+NYC0mmeOLvtsF8iaEf0YT6dBw==", + "version": "6.0.6", "dev": true, + "license": "MIT", "dependencies": { "cssesc": "^3.0.0", - "indexes-of": "^1.0.1", - "uniq": "^1.0.1", "util-deprecate": "^1.0.2" }, "engines": { @@ -12086,84 +10521,87 @@ } }, "node_modules/postcss-svgo": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-4.0.2.tgz", - "integrity": "sha512-C6wyjo3VwFm0QgBy+Fu7gCYOkCmgmClghO+pjcxvrcBKtiKt0uCF+hvbMO1fyv5BMImRK90SMb+dwUnfbGd+jw==", + "version": "5.0.2", "dev": true, + "license": "MIT", "dependencies": { - "is-svg": "^3.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0", - "svgo": "^1.0.0" + "postcss-value-parser": "^4.1.0", + "svgo": "^2.3.0" }, "engines": { - "node": ">=6.9.0" + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, - "node_modules/postcss-svgo/node_modules/postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", - "dev": true - }, "node_modules/postcss-unique-selectors": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-4.0.1.tgz", - "integrity": "sha512-+JanVaryLo9QwZjKrmJgkI4Fn8SBgRO6WXQBJi7KiAVPlmxikB5Jzc4EvXMT2H0/m0RjrVVm9rGNhZddm/8Spg==", + "version": "5.0.1", "dev": true, + "license": "MIT", "dependencies": { - "alphanum-sort": "^1.0.0", - "postcss": "^7.0.0", + "alphanum-sort": "^1.0.2", + "postcss-selector-parser": "^6.0.5", "uniqs": "^2.0.0" }, "engines": { - "node": ">=6.9.0" + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, "node_modules/postcss-value-parser": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz", - "integrity": "sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ==", - "dev": true - }, - "node_modules/postcss/node_modules/supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", "dev": true, - "dependencies": { - "has-flag": "^3.0.0" - }, + "license": "MIT" + }, + "node_modules/postcss/node_modules/colorette": { + "version": "1.2.2", + "dev": true, + "license": "MIT" + }, + "node_modules/postcss/node_modules/source-map": { + "version": "0.6.1", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pretty-bytes": { + "version": "5.6.0", + "dev": true, + "license": "MIT", "engines": { "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/process": { "version": "0.11.10", - "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", - "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.6.0" } }, "node_modules/process-nextick-args": { "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==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/promise-inflight": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", - "integrity": "sha1-mEcocL8igTL8vdhoEputEsPAKeM=", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/promise-retry": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/promise-retry/-/promise-retry-1.1.1.tgz", - "integrity": "sha1-ZznpaOMFHaIM5kl/srUPaRHfPW0=", "dev": true, + "license": "MIT", "dependencies": { "err-code": "^1.0.0", "retry": "^0.10.0" @@ -12172,22 +10610,12 @@ "node": ">=0.12" } }, - "node_modules/promise-retry/node_modules/retry": { - "version": "0.10.1", - "resolved": "https://registry.npmjs.org/retry/-/retry-0.10.1.tgz", - "integrity": "sha1-52OI0heZLCUnUCQdPTlW/tmNj/Q=", - "dev": true, - "engines": { - "node": "*" - } - }, "node_modules/proxy-addr": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.6.tgz", - "integrity": "sha512-dh/frvCBVmSsDYzw6n926jv974gddhkFPfiN8hPOi30Wax25QZyZEGveluCgliBnqmuM+UJmBErbAUFIoDbjOw==", + "version": "2.0.7", "dev": true, + "license": "MIT", "dependencies": { - "forwarded": "~0.1.2", + "forwarded": "0.2.0", "ipaddr.js": "1.9.1" }, "engines": { @@ -12196,21 +10624,18 @@ }, "node_modules/prr": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", - "integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY=", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/psl": { "version": "1.8.0", - "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz", - "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/public-encrypt": { "version": "4.0.3", - "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz", - "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==", "dev": true, + "license": "MIT", "dependencies": { "bn.js": "^4.1.0", "browserify-rsa": "^4.0.0", @@ -12220,11 +10645,15 @@ "safe-buffer": "^5.1.2" } }, + "node_modules/public-encrypt/node_modules/bn.js": { + "version": "4.12.0", + "dev": true, + "license": "MIT" + }, "node_modules/pump": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", "dev": true, + "license": "MIT", "dependencies": { "end-of-stream": "^1.1.0", "once": "^1.3.1" @@ -12232,9 +10661,8 @@ }, "node_modules/pumpify": { "version": "1.5.1", - "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-1.5.1.tgz", - "integrity": "sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==", "dev": true, + "license": "MIT", "dependencies": { "duplexify": "^3.6.0", "inherits": "^2.0.3", @@ -12243,9 +10671,8 @@ }, "node_modules/pumpify/node_modules/pump": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz", - "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==", "dev": true, + "license": "MIT", "dependencies": { "end-of-stream": "^1.1.0", "once": "^1.3.1" @@ -12253,34 +10680,14 @@ }, "node_modules/punycode": { "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "license": "MIT", "engines": { "node": ">=6" } }, - "node_modules/pushdata-bitcoin": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/pushdata-bitcoin/-/pushdata-bitcoin-1.0.1.tgz", - "integrity": "sha1-FZMdPNlnreUiBvUjqnMxrvfUOvc=", - "dependencies": { - "bitcoin-ops": "^1.3.0" - } - }, - "node_modules/q": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", - "integrity": "sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=", - "dev": true, - "engines": { - "node": ">=0.6.0", - "teleport": ">=0.2.0" - } - }, "node_modules/qrcode": { "version": "1.4.2", - "resolved": "https://registry.npmjs.org/qrcode/-/qrcode-1.4.2.tgz", - "integrity": "sha512-eR6RgxFYPDFH+zFLTJKtoNP/RlsHANQb52AUmQ2bGDPMuUw7jJb0F+DNEgx7qQGIElrbFxWYMc0/B91zLZPF9Q==", + "license": "MIT", "dependencies": { "dijkstrajs": "^1.0.1", "isarray": "^2.0.1", @@ -12294,20 +10701,163 @@ "node": ">=4" } }, + "node_modules/qrcode/node_modules/ansi-regex": { + "version": "4.1.0", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/qrcode/node_modules/camelcase": { + "version": "5.3.1", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/qrcode/node_modules/cliui": { + "version": "5.0.0", + "license": "ISC", + "dependencies": { + "string-width": "^3.1.0", + "strip-ansi": "^5.2.0", + "wrap-ansi": "^5.1.0" + } + }, + "node_modules/qrcode/node_modules/emoji-regex": { + "version": "7.0.3", + "license": "MIT" + }, + "node_modules/qrcode/node_modules/find-up": { + "version": "3.0.0", + "license": "MIT", + "dependencies": { + "locate-path": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/qrcode/node_modules/is-fullwidth-code-point": { + "version": "2.0.0", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/qrcode/node_modules/locate-path": { + "version": "3.0.0", + "license": "MIT", + "dependencies": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/qrcode/node_modules/p-limit": { + "version": "2.3.0", + "license": "MIT", + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/qrcode/node_modules/p-locate": { + "version": "3.0.0", + "license": "MIT", + "dependencies": { + "p-limit": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/qrcode/node_modules/path-exists": { + "version": "3.0.0", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/qrcode/node_modules/string-width": { + "version": "3.1.0", + "license": "MIT", + "dependencies": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/qrcode/node_modules/strip-ansi": { + "version": "5.2.0", + "license": "MIT", + "dependencies": { + "ansi-regex": "^4.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/qrcode/node_modules/wrap-ansi": { + "version": "5.1.0", + "license": "MIT", + "dependencies": { + "ansi-styles": "^3.2.0", + "string-width": "^3.0.0", + "strip-ansi": "^5.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/qrcode/node_modules/y18n": { + "version": "4.0.3", + "license": "ISC" + }, + "node_modules/qrcode/node_modules/yargs": { + "version": "13.3.2", + "license": "MIT", + "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" + } + }, + "node_modules/qrcode/node_modules/yargs-parser": { + "version": "13.1.2", + "license": "ISC", + "dependencies": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + } + }, "node_modules/qs": { "version": "6.7.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", - "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==", "dev": true, + "license": "BSD-3-Clause", "engines": { "node": ">=0.6" } }, "node_modules/querystring": { "version": "0.2.0", - "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", - "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=", - "deprecated": "The querystring API is considered Legacy. new code should use the URLSearchParams API instead.", "dev": true, "engines": { "node": ">=0.4.x" @@ -12315,8 +10865,6 @@ }, "node_modules/querystring-es3": { "version": "0.2.1", - "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz", - "integrity": "sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM=", "dev": true, "engines": { "node": ">=0.4.x" @@ -12324,23 +10872,40 @@ }, "node_modules/querystringify": { "version": "2.2.0", - "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", - "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==", - "dev": true + "dev": true, + "license": "MIT" + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" }, "node_modules/randombytes": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", - "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "dev": true, + "license": "MIT", "dependencies": { "safe-buffer": "^5.1.0" } }, "node_modules/randomfill": { "version": "1.0.4", - "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz", - "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==", "dev": true, + "license": "MIT", "dependencies": { "randombytes": "^2.0.5", "safe-buffer": "^5.1.0" @@ -12348,18 +10913,16 @@ }, "node_modules/range-parser": { "version": "1.2.1", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", - "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.6" } }, "node_modules/raw-body": { "version": "2.4.0", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz", - "integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==", "dev": true, + "license": "MIT", "dependencies": { "bytes": "3.1.0", "http-errors": "1.7.2", @@ -12370,32 +10933,10 @@ "node": ">= 0.8" } }, - "node_modules/raw-body/node_modules/bytes": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", - "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==", - "dev": true, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/raw-body/node_modules/iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "dev": true, - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/raw-loader": { "version": "4.0.2", - "resolved": "https://registry.npmjs.org/raw-loader/-/raw-loader-4.0.2.tgz", - "integrity": "sha512-ZnScIV3ag9A4wPX/ZayxL/jZH+euYb6FcUinPcgiQW0+UBtEv0O6Q3lGd3cqJ+GHH+rksEv3Pj99oxJ3u3VIKA==", "dev": true, + "license": "MIT", "dependencies": { "loader-utils": "^2.0.0", "schema-utils": "^3.0.0" @@ -12412,12 +10953,11 @@ } }, "node_modules/raw-loader/node_modules/schema-utils": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.0.0.tgz", - "integrity": "sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA==", + "version": "3.1.0", "dev": true, + "license": "MIT", "dependencies": { - "@types/json-schema": "^7.0.6", + "@types/json-schema": "^7.0.7", "ajv": "^6.12.5", "ajv-keywords": "^3.5.2" }, @@ -12431,27 +10971,16 @@ }, "node_modules/read-cache": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", - "integrity": "sha1-5mTvMRYRZsl1HNvo28+GtftY93Q=", "dev": true, + "license": "MIT", "dependencies": { "pify": "^2.3.0" } }, - "node_modules/read-cache/node_modules/pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/read-package-json-fast": { "version": "1.2.2", - "resolved": "https://registry.npmjs.org/read-package-json-fast/-/read-package-json-fast-1.2.2.tgz", - "integrity": "sha512-39DbPJjkltEzfXJXB6D8/Ir3GFOU2YbSKa2HaB/Y3nKrc/zY+0XrALpID6/13ezWyzqvOHrBbR4t4cjQuTdBVQ==", "dev": true, + "license": "ISC", "dependencies": { "json-parse-even-better-errors": "^2.3.0", "npm-normalize-package-bin": "^1.0.1" @@ -12459,8 +10988,8 @@ }, "node_modules/readable-stream": { "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dev": true, + "license": "MIT", "dependencies": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", @@ -12471,10 +11000,9 @@ } }, "node_modules/readdirp": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.5.0.tgz", - "integrity": "sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ==", + "version": "3.6.0", "dev": true, + "license": "MIT", "dependencies": { "picomatch": "^2.2.1" }, @@ -12484,21 +11012,18 @@ }, "node_modules/reflect-metadata": { "version": "0.1.13", - "resolved": "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.1.13.tgz", - "integrity": "sha512-Ts1Y/anZELhSsjMcU605fU9RE4Oi3p5ORujwbIKXfWa+0Zxs510Qrmrce5/Jowq3cHSZSJqBjypxmHarc+vEWg==", - "dev": true + "dev": true, + "license": "Apache-2.0" }, "node_modules/regenerate": { "version": "1.4.2", - "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", - "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/regenerate-unicode-properties": { "version": "8.2.0", - "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-8.2.0.tgz", - "integrity": "sha512-F9DjY1vKLo/tPePDycuH3dn9H1OTPIkVD9Kz4LODu+F2C75mgjAJ7x/gwy6ZcSNRAAkhNlJSOHRe8k3p+K9WhA==", "dev": true, + "license": "MIT", "dependencies": { "regenerate": "^1.4.0" }, @@ -12508,24 +11033,21 @@ }, "node_modules/regenerator-runtime": { "version": "0.13.7", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz", - "integrity": "sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/regenerator-transform": { "version": "0.14.5", - "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.14.5.tgz", - "integrity": "sha512-eOf6vka5IO151Jfsw2NO9WpGX58W6wWmefK3I1zEGr0lOD0u8rwPaNqQL1aRxUaxLeKO3ArNh3VYg1KbaD+FFw==", "dev": true, + "license": "MIT", "dependencies": { "@babel/runtime": "^7.8.4" } }, "node_modules/regex-not": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", - "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", "dev": true, + "license": "MIT", "dependencies": { "extend-shallow": "^3.0.2", "safe-regex": "^1.1.0" @@ -12536,43 +11058,16 @@ }, "node_modules/regex-parser": { "version": "2.2.11", - "resolved": "https://registry.npmjs.org/regex-parser/-/regex-parser-2.2.11.tgz", - "integrity": "sha512-jbD/FT0+9MBU2XAZluI7w2OBs1RBi6p9M83nkoZayQXXU9e8Robt69FcZc7wU4eJD/YFTjn1JdCk3rbMJajz8Q==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/regexp.prototype.flags": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.3.0.tgz", - "integrity": "sha512-2+Q0C5g951OlYlJz6yu5/M33IcsESLlLfsyIaLJaG4FA2r4yP8MvVMJUUP/fVBkSpbbbZlS5gynbEWLipiiXiQ==", + "version": "1.3.1", "dev": true, + "license": "MIT", "dependencies": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.0-next.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/regexp.prototype.flags/node_modules/es-abstract": { - "version": "1.17.7", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.7.tgz", - "integrity": "sha512-VBl/gnfcJ7OercKA9MVaegWsBHFjV492syMudcnQZvt/Dw8ezpcOHYZXa/J96O8vx+g4x65YKhxOwDUh63aS5g==", - "dev": true, - "dependencies": { - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.1", - "is-callable": "^1.2.2", - "is-regex": "^1.1.1", - "object-inspect": "^1.8.0", - "object-keys": "^1.1.1", - "object.assign": "^4.1.1", - "string.prototype.trimend": "^1.0.1", - "string.prototype.trimstart": "^1.0.1" + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" }, "engines": { "node": ">= 0.4" @@ -12583,9 +11078,8 @@ }, "node_modules/regexpu-core": { "version": "4.7.1", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.7.1.tgz", - "integrity": "sha512-ywH2VUraA44DZQuRKzARmw6S66mr48pQVva4LBeRhcOltJ6hExvWly5ZjFLYo67xbIxb6W1q4bAGtgfEl20zfQ==", "dev": true, + "license": "MIT", "dependencies": { "regenerate": "^1.4.0", "regenerate-unicode-properties": "^8.2.0", @@ -12600,15 +11094,13 @@ }, "node_modules/regjsgen": { "version": "0.5.2", - "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.5.2.tgz", - "integrity": "sha512-OFFT3MfrH90xIW8OOSyUrk6QHD5E9JOTeGodiJeBS3J6IwlgzJMNE/1bZklWz5oTg+9dCMyEetclvCVXOPoN3A==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/regjsparser": { - "version": "0.6.4", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.6.4.tgz", - "integrity": "sha512-64O87/dPDgfk8/RQqC4gkZoGyyWFIEUTTh80CU6CWuK5vkCGyekIx+oKcEIYtP/RAxSQltCZHCNu/mdd7fqlJw==", + "version": "0.6.9", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "jsesc": "~0.5.0" }, @@ -12618,8 +11110,6 @@ }, "node_modules/regjsparser/node_modules/jsesc": { "version": "0.5.0", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", - "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=", "dev": true, "bin": { "jsesc": "bin/jsesc" @@ -12627,34 +11117,29 @@ }, "node_modules/remove-trailing-separator": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", - "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/repeat-element": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.3.tgz", - "integrity": "sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g==", + "version": "1.1.4", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/repeat-string": { "version": "1.6.1", - "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", - "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10" } }, "node_modules/request": { "version": "2.88.2", - "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", - "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", - "deprecated": "request has been deprecated, see https://github.com/request/request/issues/3142", "dev": true, + "license": "Apache-2.0", "dependencies": { "aws-sign2": "~0.7.0", "aws4": "^1.8.0", @@ -12683,47 +11168,40 @@ }, "node_modules/request/node_modules/qs": { "version": "6.5.2", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", - "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==", "dev": true, + "license": "BSD-3-Clause", "engines": { "node": ">=0.6" } }, "node_modules/request/node_modules/uuid": { "version": "3.4.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", - "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", - "deprecated": "Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.", "dev": true, + "license": "MIT", "bin": { "uuid": "bin/uuid" } }, "node_modules/require-directory": { "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", + "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/require-main-filename": { "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==" + "license": "ISC" }, "node_modules/requires-port": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", - "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/resolve": { "version": "1.19.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.19.0.tgz", - "integrity": "sha512-rArEXAgsBG4UgRGcynxWIWKFvh/XZCcS8UJdHhwy91zwAvCZIbcs+vAbflgBnNjYMs/i/i+/Ux6IZhML1yPvxg==", "dev": true, + "license": "MIT", "dependencies": { "is-core-module": "^2.1.0", "path-parse": "^1.0.6" @@ -12734,9 +11212,8 @@ }, "node_modules/resolve-cwd": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-2.0.0.tgz", - "integrity": "sha1-AKn3OHVW4nA46uIyyqNypqWbZlo=", "dev": true, + "license": "MIT", "dependencies": { "resolve-from": "^3.0.0" }, @@ -12744,83 +11221,58 @@ "node": ">=4" } }, - "node_modules/resolve-from": { + "node_modules/resolve-cwd/node_modules/resolve-from": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", - "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=", "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/resolve-from": { + "version": "4.0.0", + "dev": true, + "license": "MIT", "engines": { "node": ">=4" } }, "node_modules/resolve-url": { "version": "0.2.1", - "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", - "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=", - "deprecated": "https://github.com/lydell/resolve-url#deprecated", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/resolve-url-loader": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/resolve-url-loader/-/resolve-url-loader-3.1.2.tgz", - "integrity": "sha512-QEb4A76c8Mi7I3xNKXlRKQSlLBwjUV/ULFMP+G7n3/7tJZ8MG5wsZ3ucxP1Jz8Vevn6fnJsxDx9cIls+utGzPQ==", + "version": "4.0.0", "dev": true, + "license": "MIT", "dependencies": { - "adjust-sourcemap-loader": "3.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", + "adjust-sourcemap-loader": "^4.0.0", + "convert-source-map": "^1.7.0", + "loader-utils": "^2.0.0", + "postcss": "^7.0.35", "source-map": "0.6.1" }, "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/resolve-url-loader/node_modules/emojis-list": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-2.1.0.tgz", - "integrity": "sha1-TapNnbAPmBmIDHn6RXrlsJof04k=", - "dev": true, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/resolve-url-loader/node_modules/json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", - "dev": true, - "dependencies": { - "minimist": "^1.2.0" + "node": ">=8.9" }, - "bin": { - "json5": "lib/cli.js" - } - }, - "node_modules/resolve-url-loader/node_modules/loader-utils": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.2.3.tgz", - "integrity": "sha512-fkpz8ejdnEMG3s37wGL07iSBDg99O9D5yflE9RGNH3hRdx9SOwYfnGYdZOUIZitN8E+E2vkq3MUMYMvPYl5ZZA==", - "dev": true, - "dependencies": { - "big.js": "^5.2.2", - "emojis-list": "^2.0.0", - "json5": "^1.0.1" + "peerDependencies": { + "rework": "1.0.1", + "rework-visit": "1.0.0" }, - "engines": { - "node": ">=4.0.0" + "peerDependenciesMeta": { + "rework": { + "optional": true + }, + "rework-visit": { + "optional": true + } } }, "node_modules/resolve-url-loader/node_modules/postcss": { - "version": "7.0.21", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.21.tgz", - "integrity": "sha512-uIFtJElxJo29QC753JzhidoAhvp/e/Exezkdhfmt8AymWT6/5B7W1WmponYWkHk2eg6sONyTch0A3nkMPun3SQ==", + "version": "7.0.36", "dev": true, + "license": "MIT", "dependencies": { "chalk": "^2.4.2", "source-map": "^0.6.1", @@ -12828,13 +11280,24 @@ }, "engines": { "node": ">=6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + } + }, + "node_modules/resolve-url-loader/node_modules/source-map": { + "version": "0.6.1", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" } }, "node_modules/resolve-url-loader/node_modules/supports-color": { "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", "dev": true, + "license": "MIT", "dependencies": { "has-flag": "^3.0.0" }, @@ -12844,9 +11307,8 @@ }, "node_modules/restore-cursor": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", - "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", "dev": true, + "license": "MIT", "dependencies": { "onetime": "^5.1.0", "signal-exit": "^3.0.2" @@ -12857,71 +11319,43 @@ }, "node_modules/ret": { "version": "0.1.15", - "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", - "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.12" } }, "node_modules/retry": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", - "integrity": "sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs=", + "version": "0.10.1", "dev": true, + "license": "MIT", "engines": { - "node": ">= 4" + "node": "*" } }, "node_modules/reusify": { "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", "dev": true, + "license": "MIT", "engines": { "iojs": ">=1.0.0", "node": ">=0.10.0" } }, - "node_modules/rework": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/rework/-/rework-1.0.1.tgz", - "integrity": "sha1-MIBqhBNCtUUQqkEQhQzUhTQUSqc=", - "dev": true, - "dependencies": { - "convert-source-map": "^0.3.3", - "css": "^2.0.0" - } - }, - "node_modules/rework-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/rework-visit/-/rework-visit-1.0.0.tgz", - "integrity": "sha1-mUWygD8hni96ygCtuLyfZA+ELJo=", - "dev": true - }, - "node_modules/rework/node_modules/convert-source-map": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-0.3.5.tgz", - "integrity": "sha1-8dgClQr33SYxof6+BZZVDIarMZA=", - "dev": true - }, "node_modules/rgb-regex": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/rgb-regex/-/rgb-regex-1.0.1.tgz", - "integrity": "sha1-wODWiC3w4jviVKR16O3UGRX+rrE=", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/rgba-regex": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/rgba-regex/-/rgba-regex-1.0.0.tgz", - "integrity": "sha1-QzdOLiyglosO8VI0YLfXMP8i7rM=", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/rimraf": { "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", "dev": true, + "license": "ISC", "dependencies": { "glob": "^7.1.3" }, @@ -12934,18 +11368,17 @@ }, "node_modules/ripemd160": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", - "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", + "dev": true, + "license": "MIT", "dependencies": { "hash-base": "^3.0.0", "inherits": "^2.0.1" } }, "node_modules/rollup": { - "version": "2.32.1", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.32.1.tgz", - "integrity": "sha512-Op2vWTpvK7t6/Qnm1TTh7VjEZZkN8RWgf0DHbkKzQBwNf748YhXbozHVefqpPp/Fuyk/PQPAnYsBxAEtlMvpUw==", + "version": "2.38.4", "dev": true, + "license": "MIT", "bin": { "rollup": "dist/bin/rollup" }, @@ -12953,22 +11386,19 @@ "node": ">=10.0.0" }, "optionalDependencies": { - "fsevents": "~2.1.2" + "fsevents": "~2.3.1" } }, "node_modules/run-async": { "version": "2.4.1", - "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", - "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.12.0" } }, "node_modules/run-parallel": { - "version": "1.1.10", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.1.10.tgz", - "integrity": "sha512-zb/1OuZ6flOlH6tQyMPUrE3x3Ulxjlo9WIVXR4yVYi4H9UXQaeIsPbLn2R3O3vQCnDKkAl2qHiuocKKX4Tz/Sw==", + "version": "1.2.0", "dev": true, "funding": [ { @@ -12983,21 +11413,23 @@ "type": "consulting", "url": "https://feross.org/support" } - ] + ], + "license": "MIT", + "dependencies": { + "queue-microtask": "^1.2.2" + } }, "node_modules/run-queue": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/run-queue/-/run-queue-1.0.3.tgz", - "integrity": "sha1-6Eg5bwV9Ij8kOGkkYY4laUFh7Ec=", "dev": true, + "license": "ISC", "dependencies": { "aproba": "^1.1.1" } }, "node_modules/rxjs": { - "version": "6.6.3", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.3.tgz", - "integrity": "sha512-trsQc+xYYXZ3urjOiJOuCOa5N3jAZ3eiSpQB5hIT8zGlL2QfnHLJ2r7GMkBGuIausdJN1OneaI6gQlsqNHHmZQ==", + "version": "6.6.7", + "license": "Apache-2.0", "dependencies": { "tslib": "^1.9.0" }, @@ -13007,47 +11439,30 @@ }, "node_modules/rxjs/node_modules/tslib": { "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + "license": "0BSD" }, "node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] + "version": "5.1.2", + "dev": true, + "license": "MIT" }, "node_modules/safe-regex": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", - "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", "dev": true, + "license": "MIT", "dependencies": { "ret": "~0.1.10" } }, "node_modules/safer-buffer": { "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + "dev": true, + "license": "MIT" }, "node_modules/sass": { - "version": "1.27.0", - "resolved": "https://registry.npmjs.org/sass/-/sass-1.27.0.tgz", - "integrity": "sha512-0gcrER56OkzotK/GGwgg4fPrKuiFlPNitO7eUJ18Bs+/NBlofJfMxmxqpqJxjae9vu0Wq8TZzrSyxZal00WDig==", + "version": "1.32.6", "dev": true, + "license": "MIT", "dependencies": { "chokidar": ">=2.0.0 <4.0.0" }, @@ -13059,10 +11474,9 @@ } }, "node_modules/sass-loader": { - "version": "10.0.5", - "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-10.0.5.tgz", - "integrity": "sha512-2LqoNPtKkZq/XbXNQ4C64GFEleSEHKv6NPSI+bMC/l+jpEXGJhiRYkAQToO24MR7NU4JRY2RpLpJ/gjo2Uf13w==", + "version": "10.1.1", "dev": true, + "license": "MIT", "dependencies": { "klona": "^2.0.4", "loader-utils": "^2.0.0", @@ -13096,12 +11510,11 @@ } }, "node_modules/sass-loader/node_modules/schema-utils": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.0.0.tgz", - "integrity": "sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA==", + "version": "3.1.0", "dev": true, + "license": "MIT", "dependencies": { - "@types/json-schema": "^7.0.6", + "@types/json-schema": "^7.0.7", "ajv": "^6.12.5", "ajv-keywords": "^3.5.2" }, @@ -13115,15 +11528,13 @@ }, "node_modules/sax": { "version": "1.2.4", - "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", - "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/schema-utils": { "version": "2.7.1", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.1.tgz", - "integrity": "sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==", "dev": true, + "license": "MIT", "dependencies": { "@types/json-schema": "^7.0.5", "ajv": "^6.12.4", @@ -13139,24 +11550,24 @@ }, "node_modules/select-hose": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz", - "integrity": "sha1-Yl2GWPhlr0Psliv8N2o3NZpJlMo=", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/selfsigned": { - "version": "1.10.8", - "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-1.10.8.tgz", - "integrity": "sha512-2P4PtieJeEwVgTU9QEcwIRDQ/mXJLX8/+I3ur+Pg16nS8oNbrGxEso9NyYWy8NAmXiNl4dlAp5MwoNeCWzON4w==", + "version": "1.10.11", "dev": true, + "license": "MIT", "dependencies": { "node-forge": "^0.10.0" } }, "node_modules/semver": { - "version": "7.3.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.2.tgz", - "integrity": "sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ==", + "version": "7.3.4", "dev": true, + "license": "ISC", + "dependencies": { + "lru-cache": "^6.0.0" + }, "bin": { "semver": "bin/semver.js" }, @@ -13166,27 +11577,24 @@ }, "node_modules/semver-intersect": { "version": "1.4.0", - "resolved": "https://registry.npmjs.org/semver-intersect/-/semver-intersect-1.4.0.tgz", - "integrity": "sha512-d8fvGg5ycKAq0+I6nfWeCx6ffaWJCsBYU0H2Rq56+/zFePYfT8mXkB3tWBSjR5BerkHNZ5eTPIk1/LBYas35xQ==", "dev": true, + "license": "MIT", "dependencies": { "semver": "^5.0.0" } }, "node_modules/semver-intersect/node_modules/semver": { "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", "dev": true, + "license": "ISC", "bin": { "semver": "bin/semver" } }, "node_modules/send": { "version": "0.17.1", - "resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz", - "integrity": "sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==", "dev": true, + "license": "MIT", "dependencies": { "debug": "2.6.9", "depd": "~1.1.2", @@ -13208,39 +11616,34 @@ }, "node_modules/send/node_modules/debug": { "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dev": true, + "license": "MIT", "dependencies": { "ms": "2.0.0" } }, "node_modules/send/node_modules/debug/node_modules/ms": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/send/node_modules/ms": { "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", - "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/serialize-javascript": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-4.0.0.tgz", - "integrity": "sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==", + "version": "5.0.1", "dev": true, + "license": "BSD-3-Clause", "dependencies": { "randombytes": "^2.1.0" } }, "node_modules/serve-index": { "version": "1.9.1", - "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz", - "integrity": "sha1-03aNabHn2C5c4FD/9bRTvqEqkjk=", "dev": true, + "license": "MIT", "dependencies": { "accepts": "~1.3.4", "batch": "0.6.1", @@ -13256,18 +11659,16 @@ }, "node_modules/serve-index/node_modules/debug": { "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dev": true, + "license": "MIT", "dependencies": { "ms": "2.0.0" } }, "node_modules/serve-index/node_modules/http-errors": { "version": "1.6.3", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", - "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", "dev": true, + "license": "MIT", "dependencies": { "depd": "~1.1.2", "inherits": "2.0.3", @@ -13280,27 +11681,23 @@ }, "node_modules/serve-index/node_modules/inherits": { "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/serve-index/node_modules/ms": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/serve-index/node_modules/setprototypeof": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", - "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/serve-static": { "version": "1.14.1", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz", - "integrity": "sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==", "dev": true, + "license": "MIT", "dependencies": { "encodeurl": "~1.0.2", "escape-html": "~1.0.3", @@ -13313,14 +11710,12 @@ }, "node_modules/set-blocking": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=" + "license": "ISC" }, "node_modules/set-value": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", - "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==", "dev": true, + "license": "MIT", "dependencies": { "extend-shallow": "^2.0.1", "is-extendable": "^0.1.1", @@ -13333,9 +11728,8 @@ }, "node_modules/set-value/node_modules/extend-shallow": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, + "license": "MIT", "dependencies": { "is-extendable": "^0.1.0" }, @@ -13343,22 +11737,28 @@ "node": ">=0.10.0" } }, + "node_modules/set-value/node_modules/is-extendable": { + "version": "0.1.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/setimmediate": { "version": "1.0.5", - "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", - "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/setprototypeof": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", - "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/sha.js": { "version": "2.4.11", - "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", - "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", + "dev": true, + "license": "(MIT AND BSD-3-Clause)", "dependencies": { "inherits": "^2.0.1", "safe-buffer": "^5.0.1" @@ -13369,9 +11769,8 @@ }, "node_modules/shallow-clone": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", - "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", "dev": true, + "license": "MIT", "dependencies": { "kind-of": "^6.0.2" }, @@ -13380,61 +11779,41 @@ } }, "node_modules/shebang-command": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", - "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", + "version": "2.0.0", "dev": true, + "license": "MIT", "dependencies": { - "shebang-regex": "^1.0.0" + "shebang-regex": "^3.0.0" }, "engines": { - "node": ">=0.10.0" + "node": ">=8" } }, "node_modules/shebang-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", - "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", + "version": "3.0.0", "dev": true, + "license": "MIT", "engines": { - "node": ">=0.10.0" + "node": ">=8" } }, "node_modules/signal-exit": { "version": "3.0.3", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz", - "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==", - "dev": true - }, - "node_modules/simple-swizzle": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", - "integrity": "sha1-pNprY1/8zMoz9w0Xy5JZLeleVXo=", "dev": true, - "dependencies": { - "is-arrayish": "^0.3.1" - } - }, - "node_modules/simple-swizzle/node_modules/is-arrayish": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", - "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==", - "dev": true + "license": "ISC" }, "node_modules/slash": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/slice-ansi": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", - "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^4.0.0", "astral-regex": "^2.0.0", @@ -13449,9 +11828,8 @@ }, "node_modules/slice-ansi/node_modules/ansi-styles": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, + "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, @@ -13464,9 +11842,8 @@ }, "node_modules/slice-ansi/node_modules/color-convert": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, + "license": "MIT", "dependencies": { "color-name": "~1.1.4" }, @@ -13476,24 +11853,13 @@ }, "node_modules/slice-ansi/node_modules/color-name": { "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/slice-ansi/node_modules/is-fullwidth-code-point": { - "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==", "dev": true, - "engines": { - "node": ">=8" - } + "license": "MIT" }, "node_modules/smart-buffer": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.1.0.tgz", - "integrity": "sha512-iVICrxOzCynf/SNaBQCw34eM9jROU/s5rzIhpOvzhzuYHfJR/DhZfDkXiZSgKXfgv26HT3Yni3AV/DGw0cGnnw==", "dev": true, + "license": "MIT", "engines": { "node": ">= 6.0.0", "npm": ">= 3.0.0" @@ -13501,9 +11867,8 @@ }, "node_modules/snapdragon": { "version": "0.8.2", - "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", - "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", "dev": true, + "license": "MIT", "dependencies": { "base": "^0.11.1", "debug": "^2.2.0", @@ -13520,9 +11885,8 @@ }, "node_modules/snapdragon-node": { "version": "2.1.1", - "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", - "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", "dev": true, + "license": "MIT", "dependencies": { "define-property": "^1.0.0", "isobject": "^3.0.0", @@ -13534,9 +11898,8 @@ }, "node_modules/snapdragon-node/node_modules/define-property": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", "dev": true, + "license": "MIT", "dependencies": { "is-descriptor": "^1.0.0" }, @@ -13544,49 +11907,10 @@ "node": ">=0.10.0" } }, - "node_modules/snapdragon-node/node_modules/is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "dependencies": { - "kind-of": "^6.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon-node/node_modules/is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "dependencies": { - "kind-of": "^6.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon-node/node_modules/is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "dependencies": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/snapdragon-util": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", - "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", "dev": true, + "license": "MIT", "dependencies": { "kind-of": "^3.2.0" }, @@ -13596,9 +11920,8 @@ }, "node_modules/snapdragon-util/node_modules/kind-of": { "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, + "license": "MIT", "dependencies": { "is-buffer": "^1.1.5" }, @@ -13608,18 +11931,16 @@ }, "node_modules/snapdragon/node_modules/debug": { "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dev": true, + "license": "MIT", "dependencies": { "ms": "2.0.0" } }, "node_modules/snapdragon/node_modules/define-property": { "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", "dev": true, + "license": "MIT", "dependencies": { "is-descriptor": "^0.1.0" }, @@ -13629,9 +11950,8 @@ }, "node_modules/snapdragon/node_modules/extend-shallow": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, + "license": "MIT", "dependencies": { "is-extendable": "^0.1.0" }, @@ -13639,82 +11959,147 @@ "node": ">=0.10.0" } }, - "node_modules/snapdragon/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - }, - "node_modules/snapdragon/node_modules/source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "node_modules/snapdragon/node_modules/is-accessor-descriptor": { + "version": "0.1.6", "dev": true, + "license": "MIT", + "dependencies": { + "kind-of": "^3.0.2" + }, "engines": { "node": ">=0.10.0" } }, - "node_modules/sockjs": { - "version": "0.3.20", - "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.20.tgz", - "integrity": "sha512-SpmVOVpdq0DJc0qArhF3E5xsxvaiqGNb73XfgBpK1y3UD5gs8DSo8aCTsuT5pX8rssdc2NDIzANwP9eCAiSdTA==", + "node_modules/snapdragon/node_modules/is-accessor-descriptor/node_modules/kind-of": { + "version": "3.2.2", "dev": true, + "license": "MIT", "dependencies": { - "faye-websocket": "^0.10.0", + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon/node_modules/is-data-descriptor": { + "version": "0.1.4", + "dev": true, + "license": "MIT", + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon/node_modules/is-data-descriptor/node_modules/kind-of": { + "version": "3.2.2", + "dev": true, + "license": "MIT", + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon/node_modules/is-descriptor": { + "version": "0.1.6", + "dev": true, + "license": "MIT", + "dependencies": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon/node_modules/is-extendable": { + "version": "0.1.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon/node_modules/kind-of": { + "version": "5.1.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon/node_modules/ms": { + "version": "2.0.0", + "dev": true, + "license": "MIT" + }, + "node_modules/snapdragon/node_modules/source-map": { + "version": "0.5.7", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon/node_modules/source-map-resolve": { + "version": "0.5.3", + "dev": true, + "license": "MIT", + "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" + } + }, + "node_modules/sockjs": { + "version": "0.3.21", + "dev": true, + "license": "MIT", + "dependencies": { + "faye-websocket": "^0.11.3", "uuid": "^3.4.0", - "websocket-driver": "0.6.5" + "websocket-driver": "^0.7.4" } }, "node_modules/sockjs-client": { - "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==", + "version": "1.5.1", "dev": true, + "license": "MIT", "dependencies": { - "debug": "^3.2.5", + "debug": "^3.2.6", "eventsource": "^1.0.7", - "faye-websocket": "~0.11.1", - "inherits": "^2.0.3", - "json3": "^3.3.2", - "url-parse": "^1.4.3" + "faye-websocket": "^0.11.3", + "inherits": "^2.0.4", + "json3": "^3.3.3", + "url-parse": "^1.5.1" } }, "node_modules/sockjs-client/node_modules/debug": { "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", "dev": true, + "license": "MIT", "dependencies": { "ms": "^2.1.1" } }, - "node_modules/sockjs-client/node_modules/faye-websocket": { - "version": "0.11.3", - "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.3.tgz", - "integrity": "sha512-D2y4bovYpzziGgbHYtGCMjlJM36vAl/y+xUyn1C+FVx8szd1E+86KwVw6XvYSzOP8iMpm1X0I4xJD+QtUb36OA==", - "dev": true, - "dependencies": { - "websocket-driver": ">=0.5.1" - }, - "engines": { - "node": ">=0.8.0" - } - }, "node_modules/sockjs/node_modules/uuid": { "version": "3.4.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", - "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", - "deprecated": "Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.", "dev": true, + "license": "MIT", "bin": { "uuid": "bin/uuid" } }, "node_modules/socks": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/socks/-/socks-2.5.1.tgz", - "integrity": "sha512-oZCsJJxapULAYJaEYBSzMcz8m3jqgGrHaGhkmU/o/PQfFWYWxkAaA0UMGImb6s6tEXfKi959X6VJjMMQ3P6TTQ==", + "version": "2.6.1", "dev": true, + "license": "MIT", "dependencies": { "ip": "^1.1.5", "smart-buffer": "^4.1.0" @@ -13725,12 +12110,11 @@ } }, "node_modules/socks-proxy-agent": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-5.0.0.tgz", - "integrity": "sha512-lEpa1zsWCChxiynk+lCycKuC502RxDWLKJZoIhnxrWNjLSDGYRFflHA1/228VkRcnv9TIb8w98derGbpKxJRgA==", + "version": "5.0.1", "dev": true, + "license": "MIT", "dependencies": { - "agent-base": "6", + "agent-base": "^6.0.2", "debug": "4", "socks": "^2.3.3" }, @@ -13740,23 +12124,21 @@ }, "node_modules/source-list-map": { "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==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "version": "0.7.3", + "dev": true, + "license": "BSD-3-Clause", "engines": { - "node": ">=0.10.0" + "node": ">= 8" } }, "node_modules/source-map-loader": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/source-map-loader/-/source-map-loader-1.1.2.tgz", - "integrity": "sha512-bjf6eSENOYBX4JZDfl9vVLNsGAQ6Uz90fLmOazcmMcyDYOBFsGxPNn83jXezWLY9bJsVAo1ObztxPcV8HAbjVA==", + "version": "1.1.3", "dev": true, + "license": "MIT", "dependencies": { "abab": "^2.0.5", "iconv-lite": "^0.6.2", @@ -13777,10 +12159,9 @@ } }, "node_modules/source-map-loader/node_modules/iconv-lite": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.2.tgz", - "integrity": "sha512-2y91h5OpQlolefMPmUlivelittSWy0rP+oYVpn6A7GwVHNE8AWzoYOBNmlwks3LobaJxgHCYZAnyNo2GgpNRNQ==", + "version": "0.6.3", "dev": true, + "license": "MIT", "dependencies": { "safer-buffer": ">= 2.1.2 < 3.0.0" }, @@ -13789,12 +12170,11 @@ } }, "node_modules/source-map-loader/node_modules/schema-utils": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.0.0.tgz", - "integrity": "sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA==", + "version": "3.1.0", "dev": true, + "license": "MIT", "dependencies": { - "@types/json-schema": "^7.0.6", + "@types/json-schema": "^7.0.7", "ajv": "^6.12.5", "ajv-keywords": "^3.5.2" }, @@ -13806,46 +12186,54 @@ "url": "https://opencollective.com/webpack" } }, - "node_modules/source-map-resolve": { - "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==", + "node_modules/source-map-loader/node_modules/source-map": { + "version": "0.6.1", "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-resolve": { + "version": "0.6.0", + "dev": true, + "license": "MIT", "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" + "decode-uri-component": "^0.2.0" } }, "node_modules/source-map-support": { "version": "0.5.19", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz", - "integrity": "sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==", "dev": true, + "license": "MIT", "dependencies": { "buffer-from": "^1.0.0", "source-map": "^0.6.0" } }, + "node_modules/source-map-support/node_modules/source-map": { + "version": "0.6.1", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/source-map-url": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz", - "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=", - "dev": true + "version": "0.4.1", + "dev": true, + "license": "MIT" }, "node_modules/sourcemap-codec": { "version": "1.4.8", - "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", - "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/spdy": { "version": "4.0.2", - "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.2.tgz", - "integrity": "sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==", "dev": true, + "license": "MIT", "dependencies": { "debug": "^4.1.0", "handle-thing": "^2.0.0", @@ -13859,9 +12247,8 @@ }, "node_modules/spdy-transport": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/spdy-transport/-/spdy-transport-3.0.0.tgz", - "integrity": "sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==", "dev": true, + "license": "MIT", "dependencies": { "debug": "^4.1.0", "detect-node": "^2.0.4", @@ -13872,25 +12259,87 @@ } }, "node_modules/speed-measure-webpack-plugin": { - "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==", + "version": "1.4.2", "dev": true, + "license": "MIT", "dependencies": { - "chalk": "^2.0.1" + "chalk": "^4.1.0" }, "engines": { "node": ">=6.0.0" }, "peerDependencies": { - "webpack": "^1 || ^2 || ^3 || ^4" + "webpack": "^1 || ^2 || ^3 || ^4 || ^5" + } + }, + "node_modules/speed-measure-webpack-plugin/node_modules/ansi-styles": { + "version": "4.3.0", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/speed-measure-webpack-plugin/node_modules/chalk": { + "version": "4.1.1", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/speed-measure-webpack-plugin/node_modules/color-convert": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/speed-measure-webpack-plugin/node_modules/color-name": { + "version": "1.1.4", + "dev": true, + "license": "MIT" + }, + "node_modules/speed-measure-webpack-plugin/node_modules/has-flag": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/speed-measure-webpack-plugin/node_modules/supports-color": { + "version": "7.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" } }, "node_modules/split-string": { "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==", "dev": true, + "license": "MIT", "dependencies": { "extend-shallow": "^3.0.0" }, @@ -13900,15 +12349,13 @@ }, "node_modules/sprintf-js": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", - "dev": true + "dev": true, + "license": "BSD-3-Clause" }, "node_modules/sshpk": { "version": "1.16.1", - "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz", - "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==", "dev": true, + "license": "MIT", "dependencies": { "asn1": "~0.2.3", "assert-plus": "^1.0.0", @@ -13920,20 +12367,14 @@ "safer-buffer": "^2.0.2", "tweetnacl": "~0.14.0" }, - "bin": { - "sshpk-conv": "bin/sshpk-conv", - "sshpk-sign": "bin/sshpk-sign", - "sshpk-verify": "bin/sshpk-verify" - }, "engines": { "node": ">=0.10.0" } }, "node_modules/ssri": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-8.0.0.tgz", - "integrity": "sha512-aq/pz989nxVYwn16Tsbj1TqFpD5LLrQxHf5zaHuieFV+R0Bbr4y8qUsOA45hXT/N4/9UNXTarBjnjVmjSOVaAA==", + "version": "8.0.1", "dev": true, + "license": "ISC", "dependencies": { "minipass": "^3.1.1" }, @@ -13943,15 +12384,13 @@ }, "node_modules/stable": { "version": "0.1.8", - "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz", - "integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/static-extend": { "version": "0.1.2", - "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", - "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", "dev": true, + "license": "MIT", "dependencies": { "define-property": "^0.2.5", "object-copy": "^0.1.0" @@ -13962,9 +12401,8 @@ }, "node_modules/static-extend/node_modules/define-property": { "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", "dev": true, + "license": "MIT", "dependencies": { "is-descriptor": "^0.1.0" }, @@ -13972,20 +12410,83 @@ "node": ">=0.10.0" } }, + "node_modules/static-extend/node_modules/is-accessor-descriptor": { + "version": "0.1.6", + "dev": true, + "license": "MIT", + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/static-extend/node_modules/is-accessor-descriptor/node_modules/kind-of": { + "version": "3.2.2", + "dev": true, + "license": "MIT", + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/static-extend/node_modules/is-data-descriptor": { + "version": "0.1.4", + "dev": true, + "license": "MIT", + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/static-extend/node_modules/is-data-descriptor/node_modules/kind-of": { + "version": "3.2.2", + "dev": true, + "license": "MIT", + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/static-extend/node_modules/is-descriptor": { + "version": "0.1.6", + "dev": true, + "license": "MIT", + "dependencies": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/static-extend/node_modules/kind-of": { + "version": "5.1.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/statuses": { "version": "1.5.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", - "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.6" } }, "node_modules/stream-browserify": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.2.tgz", - "integrity": "sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg==", "dev": true, + "license": "MIT", "dependencies": { "inherits": "~2.0.1", "readable-stream": "^2.0.2" @@ -13993,15 +12494,13 @@ }, "node_modules/stream-browserify/node_modules/isarray": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/stream-browserify/node_modules/readable-stream": { "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", "dev": true, + "license": "MIT", "dependencies": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", @@ -14012,26 +12511,18 @@ "util-deprecate": "~1.0.1" } }, - "node_modules/stream-browserify/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, "node_modules/stream-browserify/node_modules/string_decoder": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "dev": true, + "license": "MIT", "dependencies": { "safe-buffer": "~5.1.0" } }, "node_modules/stream-each": { "version": "1.2.3", - "resolved": "https://registry.npmjs.org/stream-each/-/stream-each-1.2.3.tgz", - "integrity": "sha512-vlMC2f8I2u/bZGqkdfLQW/13Zihpej/7PmSiMQsbYddxuTsJp8vRe2x2FvVExZg7FaOds43ROAuFJwPR4MTZLw==", "dev": true, + "license": "MIT", "dependencies": { "end-of-stream": "^1.1.0", "stream-shift": "^1.0.0" @@ -14039,9 +12530,8 @@ }, "node_modules/stream-http": { "version": "2.8.3", - "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-2.8.3.tgz", - "integrity": "sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw==", "dev": true, + "license": "MIT", "dependencies": { "builtin-status-codes": "^3.0.0", "inherits": "^2.0.1", @@ -14052,15 +12542,13 @@ }, "node_modules/stream-http/node_modules/isarray": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/stream-http/node_modules/readable-stream": { "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", "dev": true, + "license": "MIT", "dependencies": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", @@ -14071,99 +12559,82 @@ "util-deprecate": "~1.0.1" } }, - "node_modules/stream-http/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, "node_modules/stream-http/node_modules/string_decoder": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "dev": true, + "license": "MIT", "dependencies": { "safe-buffer": "~5.1.0" } }, "node_modules/stream-shift": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.1.tgz", - "integrity": "sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/string_decoder": { "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==", + "dev": true, + "license": "MIT", "dependencies": { "safe-buffer": "~5.2.0" } }, + "node_modules/string_decoder/node_modules/safe-buffer": { + "version": "5.2.1", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, "node_modules/string-width": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", - "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "version": "4.2.2", + "dev": true, + "license": "MIT", "dependencies": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.0" }, "engines": { - "node": ">=6" - } - }, - "node_modules/string.prototype.trimend": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.3.tgz", - "integrity": "sha512-ayH0pB+uf0U28CtjlLvL7NaohvR1amUvVZk+y3DYb0Ey2PUV5zPkkKy9+U1ndVEIXO8hNg18eIv9Jntbii+dKw==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/string.prototype.trimstart": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.3.tgz", - "integrity": "sha512-oBIBUy5lea5tt0ovtOFiEQaBkoBBkyJhZXzJYrSmDo5IUUqbOPvVezuRs/agBIdZ2p2Eo1FD6bD9USyBLfl3xg==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=8" } }, "node_modules/strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "version": "6.0.0", + "dev": true, + "license": "MIT", "dependencies": { - "ansi-regex": "^4.1.0" + "ansi-regex": "^5.0.0" }, "engines": { - "node": ">=6" + "node": ">=8" } }, "node_modules/strip-eof": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", - "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/style-loader": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-2.0.0.tgz", - "integrity": "sha512-Z0gYUJmzZ6ZdRUqpg1r8GsaFKypE+3xAzuFeMuoHgjc9KZv3wMyCRjQIWEbhoFSq7+7yoHXySDJyyWQaPajeiQ==", "dev": true, + "license": "MIT", "dependencies": { "loader-utils": "^2.0.0", "schema-utils": "^3.0.0" @@ -14180,12 +12651,11 @@ } }, "node_modules/style-loader/node_modules/schema-utils": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.0.0.tgz", - "integrity": "sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA==", + "version": "3.1.0", "dev": true, + "license": "MIT", "dependencies": { - "@types/json-schema": "^7.0.6", + "@types/json-schema": "^7.0.7", "ajv": "^6.12.5", "ajv-keywords": "^3.5.2" }, @@ -14198,38 +12668,24 @@ } }, "node_modules/stylehacks": { - "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==", + "version": "5.0.1", "dev": true, + "license": "MIT", "dependencies": { - "browserslist": "^4.0.0", - "postcss": "^7.0.0", - "postcss-selector-parser": "^3.0.0" + "browserslist": "^4.16.0", + "postcss-selector-parser": "^6.0.4" }, "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/stylehacks/node_modules/postcss-selector-parser": { - "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==", - "dev": true, - "dependencies": { - "dot-prop": "^5.2.0", - "indexes-of": "^1.0.1", - "uniq": "^1.0.1" + "node": "^10 || ^12 || >=14.0" }, - "engines": { - "node": ">=8" + "peerDependencies": { + "postcss": "^8.2.15" } }, "node_modules/stylus": { "version": "0.54.8", - "resolved": "https://registry.npmjs.org/stylus/-/stylus-0.54.8.tgz", - "integrity": "sha512-vr54Or4BZ7pJafo2mpf0ZcwA74rpuYCZbxrHBsH8kbcXOwSfvBFwsRfpGO5OD5fhG5HDCFW737PKaawI7OqEAg==", "dev": true, + "license": "MIT", "dependencies": { "css-parse": "~2.0.0", "debug": "~3.1.0", @@ -14248,10 +12704,9 @@ } }, "node_modules/stylus-loader": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/stylus-loader/-/stylus-loader-4.1.1.tgz", - "integrity": "sha512-Vnm7J/nIs/P6swIrdwJW/dflhsCOiFmb1U3PeQ6phRtg1soPLN4uKnnL7AtGIJDe173elbtYIXVzmCyF493CfA==", + "version": "4.3.3", "dev": true, + "license": "MIT", "dependencies": { "fast-glob": "^3.2.4", "klona": "^2.0.4", @@ -14272,12 +12727,11 @@ } }, "node_modules/stylus-loader/node_modules/schema-utils": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.0.0.tgz", - "integrity": "sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA==", + "version": "3.1.0", "dev": true, + "license": "MIT", "dependencies": { - "@types/json-schema": "^7.0.6", + "@types/json-schema": "^7.0.7", "ajv": "^6.12.5", "ajv-keywords": "^3.5.2" }, @@ -14291,54 +12745,29 @@ }, "node_modules/stylus/node_modules/debug": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", "dev": true, + "license": "MIT", "dependencies": { "ms": "2.0.0" } }, - "node_modules/stylus/node_modules/mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "dev": true, - "bin": { - "mkdirp": "bin/cmd.js" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/stylus/node_modules/ms": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/stylus/node_modules/semver": { "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", "dev": true, + "license": "ISC", "bin": { "semver": "bin/semver.js" } }, - "node_modules/stylus/node_modules/source-map": { - "version": "0.7.3", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", - "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", - "dev": true, - "engines": { - "node": ">= 8" - } - }, "node_modules/supports-color": { "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", "dev": true, + "license": "MIT", "dependencies": { "has-flag": "^3.0.0" }, @@ -14347,56 +12776,205 @@ } }, "node_modules/svgo": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/svgo/-/svgo-1.3.2.tgz", - "integrity": "sha512-yhy/sQYxR5BkC98CY7o31VGsg014AKLEPxdfhora76l36hD9Rdy5NZA/Ocn6yayNPgSamYdtX2rFJdcv07AYVw==", - "deprecated": "This SVGO version is no longer supported. Upgrade to v2.x.x.", + "version": "2.3.1", "dev": true, + "license": "MIT", "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" + "@trysound/sax": "0.1.1", + "chalk": "^4.1.0", + "commander": "^7.1.0", + "css-select": "^4.1.3", + "css-tree": "^1.1.2", + "csso": "^4.2.0", + "stable": "^0.1.8" }, "bin": { "svgo": "bin/svgo" }, "engines": { - "node": ">=4.0.0" + "node": ">=10.13.0" + } + }, + "node_modules/svgo/node_modules/ansi-styles": { + "version": "4.3.0", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/svgo/node_modules/chalk": { + "version": "4.1.1", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/svgo/node_modules/color-convert": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/svgo/node_modules/color-name": { + "version": "1.1.4", + "dev": true, + "license": "MIT" + }, + "node_modules/svgo/node_modules/css-select": { + "version": "4.1.3", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "boolbase": "^1.0.0", + "css-what": "^5.0.0", + "domhandler": "^4.2.0", + "domutils": "^2.6.0", + "nth-check": "^2.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/svgo/node_modules/css-what": { + "version": "5.0.1", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">= 6" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/svgo/node_modules/dom-serializer": { + "version": "1.3.2", + "dev": true, + "license": "MIT", + "dependencies": { + "domelementtype": "^2.0.1", + "domhandler": "^4.2.0", + "entities": "^2.0.0" + }, + "funding": { + "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" + } + }, + "node_modules/svgo/node_modules/domelementtype": { + "version": "2.2.0", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "license": "BSD-2-Clause" + }, + "node_modules/svgo/node_modules/domhandler": { + "version": "4.2.0", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "domelementtype": "^2.2.0" + }, + "engines": { + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" + } + }, + "node_modules/svgo/node_modules/domutils": { + "version": "2.7.0", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "dom-serializer": "^1.0.1", + "domelementtype": "^2.2.0", + "domhandler": "^4.2.0" + }, + "funding": { + "url": "https://github.com/fb55/domutils?sponsor=1" + } + }, + "node_modules/svgo/node_modules/entities": { + "version": "2.2.0", + "dev": true, + "license": "BSD-2-Clause", + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/svgo/node_modules/has-flag": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/svgo/node_modules/nth-check": { + "version": "2.0.0", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "boolbase": "^1.0.0" + }, + "funding": { + "url": "https://github.com/fb55/nth-check?sponsor=1" + } + }, + "node_modules/svgo/node_modules/supports-color": { + "version": "7.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" } }, "node_modules/symbol-observable": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-3.0.0.tgz", - "integrity": "sha512-6tDOXSHiVjuCaasQSWTmHUWn4PuG7qa3+1WT031yTc/swT7+rLiw3GOrFxaH1E3lLP09dH3bVuVDf2gK5rxG3Q==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10" } }, "node_modules/tapable": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.1.1.tgz", - "integrity": "sha512-Wib1S8m2wdpLbmQz0RBEVosIyvb/ykfKXf3ZIDqvWoMg/zTNm6G/tDSuUM61J1kNCDXWJrLHGSFeMhAG+gAGpQ==", + "version": "2.2.0", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } }, "node_modules/tar": { "version": "6.1.0", - "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.0.tgz", - "integrity": "sha512-DUCttfhsnLCjwoDoFcI+B2iJgYa93vBnDUATYEeRx6sntCTdN01VnqsIuTlALXla/LWooNg0yEGeB+Y8WdFxGA==", "dev": true, + "license": "ISC", "dependencies": { "chownr": "^2.0.0", "fs-minipass": "^2.0.0", @@ -14409,23 +12987,10 @@ "node": ">= 10" } }, - "node_modules/tar/node_modules/mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "dev": true, - "bin": { - "mkdirp": "bin/cmd.js" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/terser": { - "version": "5.3.7", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.3.7.tgz", - "integrity": "sha512-lJbKdfxWvjpV330U4PBZStCT9h3N9A4zZVA5Y4k9sCWXknrpdyxi1oMsRKLmQ/YDMDxSBKIh88v0SkdhdqX06w==", + "version": "5.5.1", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "commander": "^2.20.0", "source-map": "~0.7.2", @@ -14435,14 +13000,13 @@ "terser": "bin/terser" }, "engines": { - "node": "^10.0.0 || ^11.0.0 || ^12.0.0 || >=14.0.0" + "node": ">=10" } }, "node_modules/terser-webpack-plugin": { "version": "4.2.3", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-4.2.3.tgz", - "integrity": "sha512-jTgXh40RnvOrLQNgIkwEKnQ8rmHjHK4u+6UBEi+W+FPmvb+uo+chJXntKe7/3lW5mNysgSWD60KyesnhW8D6MQ==", "dev": true, + "license": "MIT", "dependencies": { "cacache": "^15.0.5", "find-cache-dir": "^3.3.1", @@ -14465,28 +13029,12 @@ "webpack": "^4.0.0 || ^5.0.0" } }, - "node_modules/terser-webpack-plugin/node_modules/p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dev": true, - "dependencies": { - "yocto-queue": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/terser-webpack-plugin/node_modules/schema-utils": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.0.0.tgz", - "integrity": "sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA==", + "version": "3.1.0", "dev": true, + "license": "MIT", "dependencies": { - "@types/json-schema": "^7.0.6", + "@types/json-schema": "^7.0.7", "ajv": "^6.12.5", "ajv-keywords": "^3.5.2" }, @@ -14498,41 +13046,42 @@ "url": "https://opencollective.com/webpack" } }, - "node_modules/terser-webpack-plugin/node_modules/serialize-javascript": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-5.0.1.tgz", - "integrity": "sha512-SaaNal9imEO737H2c05Og0/8LUXG7EnsZyMa8MzkmuHoELfT6txuj0cMqRj6zfPKnmQ1yasR4PCJc8x+M4JSPA==", + "node_modules/terser-webpack-plugin/node_modules/source-map": { + "version": "0.6.1", "dev": true, - "dependencies": { - "randombytes": "^2.1.0" + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" } }, - "node_modules/terser/node_modules/source-map": { - "version": "0.7.3", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", - "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", + "node_modules/terser-webpack-plugin/node_modules/webpack-sources": { + "version": "1.4.3", "dev": true, - "engines": { - "node": ">= 8" + "license": "MIT", + "dependencies": { + "source-list-map": "^2.0.0", + "source-map": "~0.6.1" } }, + "node_modules/terser/node_modules/commander": { + "version": "2.20.3", + "dev": true, + "license": "MIT" + }, "node_modules/text-table": { "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/through": { "version": "2.3.8", - "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/through2": { "version": "2.0.5", - "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", - "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", "dev": true, + "license": "MIT", "dependencies": { "readable-stream": "~2.3.6", "xtend": "~4.0.1" @@ -14540,15 +13089,13 @@ }, "node_modules/through2/node_modules/isarray": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/through2/node_modules/readable-stream": { "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", "dev": true, + "license": "MIT", "dependencies": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", @@ -14559,32 +13106,23 @@ "util-deprecate": "~1.0.1" } }, - "node_modules/through2/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, "node_modules/through2/node_modules/string_decoder": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "dev": true, + "license": "MIT", "dependencies": { "safe-buffer": "~5.1.0" } }, "node_modules/thunky": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz", - "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/timers-browserify": { "version": "2.0.12", - "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.12.tgz", - "integrity": "sha512-9phl76Cqm6FhSX9Xe1ZUAMLtm1BLkKj2Qd5ApyWkXzsMRaA7dgr81kf4wJmQf/hAvg8EEyJxDo3du/0KlhPiKQ==", "dev": true, + "license": "MIT", "dependencies": { "setimmediate": "^1.0.4" }, @@ -14594,31 +13132,13 @@ }, "node_modules/timsort": { "version": "0.3.0", - "resolved": "https://registry.npmjs.org/timsort/-/timsort-0.3.0.tgz", - "integrity": "sha1-QFQRqOfmM5/mTbmiNN4R3DHgK9Q=", - "dev": true - }, - "node_modules/tiny-secp256k1": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/tiny-secp256k1/-/tiny-secp256k1-1.1.5.tgz", - "integrity": "sha512-duE2hSLSQIpHGzmK48OgRrGTi+4OTkXLC6aa86uOYQ6LLCYZSarVKIAvEtY7MoXjoL6bOXMSerEGMzrvW4SkDw==", - "hasInstallScript": true, - "dependencies": { - "bindings": "^1.3.0", - "bn.js": "^4.11.8", - "create-hmac": "^1.1.7", - "elliptic": "^6.4.0", - "nan": "^2.13.2" - }, - "engines": { - "node": ">=6.0.0" - } + "dev": true, + "license": "MIT" }, "node_modules/tmp": { "version": "0.0.33", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", - "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", "dev": true, + "license": "MIT", "dependencies": { "os-tmpdir": "~1.0.2" }, @@ -14628,24 +13148,21 @@ }, "node_modules/to-arraybuffer": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz", - "integrity": "sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M=", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/to-fast-properties": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } }, "node_modules/to-object-path": { "version": "0.3.0", - "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", - "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", "dev": true, + "license": "MIT", "dependencies": { "kind-of": "^3.0.2" }, @@ -14655,9 +13172,8 @@ }, "node_modules/to-object-path/node_modules/kind-of": { "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, + "license": "MIT", "dependencies": { "is-buffer": "^1.1.5" }, @@ -14667,9 +13183,8 @@ }, "node_modules/to-regex": { "version": "3.0.2", - "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", - "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", "dev": true, + "license": "MIT", "dependencies": { "define-property": "^2.0.2", "extend-shallow": "^3.0.2", @@ -14682,9 +13197,8 @@ }, "node_modules/to-regex-range": { "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==", "dev": true, + "license": "MIT", "dependencies": { "is-number": "^7.0.0" }, @@ -14694,18 +13208,16 @@ }, "node_modules/toidentifier": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", - "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.6" } }, "node_modules/tough-cookie": { "version": "2.5.0", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", - "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { "psl": "^1.1.28", "punycode": "^2.1.1" @@ -14716,18 +13228,16 @@ }, "node_modules/tree-kill": { "version": "1.2.2", - "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz", - "integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==", "dev": true, + "license": "MIT", "bin": { "tree-kill": "cli.js" } }, "node_modules/ts-node": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-9.1.0.tgz", - "integrity": "sha512-0yqcL4sgruCvM+w64LiAfNJo6+lHfCYc5Ajj4yiLNkJ9oZ2HWaa+Kso7htYOOxVQ7+csAjdUjffOe9PIqC4pMg==", + "version": "9.1.1", "dev": true, + "license": "MIT", "dependencies": { "arg": "^4.1.0", "create-require": "^1.1.0", @@ -14751,9 +13261,8 @@ }, "node_modules/ts-pnp": { "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==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" }, @@ -14764,16 +13273,13 @@ } }, "node_modules/tslib": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.0.3.tgz", - "integrity": "sha512-uZtkfKblCEQtZKBF6EBXVZeQNl82yqtDQdv+eck8u7tdPxjLu2/lp5/uPW+um2tpuxINHWy3GhiccY7QgEaVHQ==" + "version": "2.1.0", + "license": "0BSD" }, "node_modules/tslint": { "version": "6.1.3", - "resolved": "https://registry.npmjs.org/tslint/-/tslint-6.1.3.tgz", - "integrity": "sha512-IbR4nkT96EQOvKE2PW/djGz8iGNeJ4rF2mBfiYaR/nvUWYKJhLwimoJKgjIFEIDibBtOevj7BqCRL4oHeWWUCg==", - "deprecated": "TSLint has been deprecated in favor of ESLint. Please see https://github.com/palantir/tslint/issues/4534 for more information.", "dev": true, + "license": "Apache-2.0", "dependencies": { "@babel/code-frame": "^7.0.0", "builtin-modules": "^1.1.1", @@ -14799,26 +13305,39 @@ "typescript": ">=2.3.0-dev || >=2.4.0-dev || >=2.5.0-dev || >=2.6.0-dev || >=2.7.0-dev || >=2.8.0-dev || >=2.9.0-dev || >=3.0.0-dev || >= 3.1.0-dev || >= 3.2.0-dev || >= 4.0.0-dev" } }, + "node_modules/tslint/node_modules/commander": { + "version": "2.20.3", + "dev": true, + "license": "MIT" + }, + "node_modules/tslint/node_modules/mkdirp": { + "version": "0.5.5", + "dev": true, + "license": "MIT", + "dependencies": { + "minimist": "^1.2.5" + }, + "bin": { + "mkdirp": "bin/cmd.js" + } + }, "node_modules/tslint/node_modules/semver": { "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", "dev": true, + "license": "ISC", "bin": { "semver": "bin/semver" } }, "node_modules/tslint/node_modules/tslib": { "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true + "dev": true, + "license": "0BSD" }, "node_modules/tsutils": { "version": "2.29.0", - "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-2.29.0.tgz", - "integrity": "sha512-g5JVHCIJwzfISaXpXE1qvNalca5Jwob6FjI4AoPlqMusJ6ftFE7IkkFoMhVLRgK+4Kx3gkzb8UZK5t5yTTvEmA==", "dev": true, + "license": "MIT", "dependencies": { "tslib": "^1.8.1" }, @@ -14828,21 +13347,18 @@ }, "node_modules/tsutils/node_modules/tslib": { "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true + "dev": true, + "license": "0BSD" }, "node_modules/tty-browserify": { "version": "0.0.0", - "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz", - "integrity": "sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY=", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/tunnel-agent": { "version": "0.6.0", - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", - "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", "dev": true, + "license": "Apache-2.0", "dependencies": { "safe-buffer": "^5.0.1" }, @@ -14852,23 +13368,15 @@ }, "node_modules/tweetnacl": { "version": "0.14.5", - "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", - "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", - "dev": true - }, - "node_modules/type": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz", - "integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==", - "dev": true + "dev": true, + "license": "Unlicense" }, "node_modules/type-fest": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.11.0.tgz", - "integrity": "sha512-OdjXJxnCN1AvyLSzeKIgXTXxV+99ZuXl3Hpo9XpJAv9MBcHrrJOQ5kV7ypXOuQie+AmWG25hLbiKdwYTifzcfQ==", + "version": "0.21.3", "dev": true, + "license": "(MIT OR CC0-1.0)", "engines": { - "node": ">=8" + "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" @@ -14876,9 +13384,8 @@ }, "node_modules/type-is": { "version": "1.6.18", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", - "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", "dev": true, + "license": "MIT", "dependencies": { "media-typer": "0.3.0", "mime-types": "~2.1.24" @@ -14889,29 +13396,21 @@ }, "node_modules/typedarray": { "version": "0.0.6", - "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", - "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/typedarray-to-buffer": { "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==", "dev": true, + "license": "MIT", "dependencies": { "is-typedarray": "^1.0.0" } }, - "node_modules/typeforce": { - "version": "1.18.0", - "resolved": "https://registry.npmjs.org/typeforce/-/typeforce-1.18.0.tgz", - "integrity": "sha512-7uc1O8h1M1g0rArakJdf0uLRSSgFcYexrVoKo+bzJd32gd4gDy2L/Z+8/FjPnU9ydY3pEnVPtr9FyscYY60K1g==" - }, "node_modules/typescript": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.0.5.tgz", - "integrity": "sha512-ywmr/VrTVCmNTJ6iV2LwIrfG1P+lv6luD8sUJs+2eI9NLGigaN+nUQc13iHqisq7bra9lnmUSYqbJvegraBOPQ==", + "version": "4.1.5", "dev": true, + "license": "Apache-2.0", "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -14921,9 +13420,8 @@ } }, "node_modules/uglify-js": { - "version": "3.12.1", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.12.1.tgz", - "integrity": "sha512-o8lHP20KjIiQe5b/67Rh68xEGRrc2SRsCuuoYclXXoC74AfSRGblU1HKzJWH3HxPZ+Ort85fWHpSX7KwBUC9CQ==", + "version": "3.13.10", + "license": "BSD-2-Clause", "optional": true, "bin": { "uglifyjs": "bin/uglifyjs" @@ -14934,18 +13432,16 @@ }, "node_modules/unicode-canonical-property-names-ecmascript": { "version": "1.0.4", - "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz", - "integrity": "sha512-jDrNnXWHd4oHiTZnx/ZG7gtUTVp+gCcTTKr8L0HjlwphROEW3+Him+IpvC+xcJEFegapiMZyZe02CyuOnRmbnQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } }, "node_modules/unicode-match-property-ecmascript": { "version": "1.0.4", - "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.4.tgz", - "integrity": "sha512-L4Qoh15vTfntsn4P1zqnHulG0LdXgjSO035fEpdtp6YxXhMT51Q6vgM5lYdG/5X3MjS+k/Y9Xw4SFCY9IkR0rg==", "dev": true, + "license": "MIT", "dependencies": { "unicode-canonical-property-names-ecmascript": "^1.0.4", "unicode-property-aliases-ecmascript": "^1.0.4" @@ -14956,27 +13452,24 @@ }, "node_modules/unicode-match-property-value-ecmascript": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.2.0.tgz", - "integrity": "sha512-wjuQHGQVofmSJv1uVISKLE5zO2rNGzM/KCYZch/QQvez7C1hUhBIuZ701fYXExuufJFMPhv2SyL8CyoIfMLbIQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } }, "node_modules/unicode-property-aliases-ecmascript": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.1.0.tgz", - "integrity": "sha512-PqSoPh/pWetQ2phoj5RLiaqIk4kCNwoV3CI+LfGmWLKI3rE3kl1h59XpX2BjgDrmbxD9ARtQobPGU1SguCYuQg==", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } }, "node_modules/union-value": { "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==", "dev": true, + "license": "MIT", "dependencies": { "arr-union": "^3.1.0", "get-value": "^2.0.6", @@ -14987,41 +13480,39 @@ "node": ">=0.10.0" } }, - "node_modules/uniq": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/uniq/-/uniq-1.0.1.tgz", - "integrity": "sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8=", - "dev": true + "node_modules/union-value/node_modules/is-extendable": { + "version": "0.1.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } }, "node_modules/uniqs": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/uniqs/-/uniqs-2.0.0.tgz", - "integrity": "sha1-/+3ks2slKQaW5uFl1KWe25mOawI=", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/unique-filename": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz", - "integrity": "sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==", "dev": true, + "license": "ISC", "dependencies": { "unique-slug": "^2.0.0" } }, "node_modules/unique-slug": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.2.tgz", - "integrity": "sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==", "dev": true, + "license": "ISC", "dependencies": { "imurmurhash": "^0.1.4" } }, "node_modules/universal-analytics": { "version": "0.4.23", - "resolved": "https://registry.npmjs.org/universal-analytics/-/universal-analytics-0.4.23.tgz", - "integrity": "sha512-lgMIH7XBI6OgYn1woDEmxhGdj8yDefMKg7GkWdeATAlQZFrMrNyxSkpDzY57iY0/6fdlzTbBV03OawvvzG+q7A==", "dev": true, + "license": "MIT", "dependencies": { "debug": "^4.1.1", "request": "^2.88.2", @@ -15030,43 +13521,32 @@ }, "node_modules/universal-analytics/node_modules/uuid": { "version": "3.4.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", - "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", - "deprecated": "Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.", "dev": true, + "license": "MIT", "bin": { "uuid": "bin/uuid" } }, "node_modules/universalify": { "version": "0.1.2", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", "dev": true, + "license": "MIT", "engines": { "node": ">= 4.0.0" } }, "node_modules/unpipe": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.8" } }, - "node_modules/unquote": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/unquote/-/unquote-1.1.1.tgz", - "integrity": "sha1-j97XMk7G6IoP+LkF58CYzcCG1UQ=", - "dev": true - }, "node_modules/unset-value": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", - "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", "dev": true, + "license": "MIT", "dependencies": { "has-value": "^0.3.1", "isobject": "^3.0.0" @@ -15077,9 +13557,8 @@ }, "node_modules/unset-value/node_modules/has-value": { "version": "0.3.1", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", - "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", "dev": true, + "license": "MIT", "dependencies": { "get-value": "^2.0.3", "has-values": "^0.1.4", @@ -15091,9 +13570,8 @@ }, "node_modules/unset-value/node_modules/has-value/node_modules/isobject": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", - "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", "dev": true, + "license": "MIT", "dependencies": { "isarray": "1.0.0" }, @@ -15103,68 +13581,59 @@ }, "node_modules/unset-value/node_modules/has-values": { "version": "0.1.4", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", - "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/unset-value/node_modules/isarray": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/untildify": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/untildify/-/untildify-4.0.0.tgz", - "integrity": "sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/upath": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz", - "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==", "dev": true, + "license": "MIT", "engines": { "node": ">=4", "yarn": "*" } }, "node_modules/uri-js": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.0.tgz", - "integrity": "sha512-B0yRTzYdUCCn9n+F4+Gh4yIDtMQcaJsmYBDsTSG8g/OejKBodLQ2IHfN3bM7jUsRXndopT7OIXWdYqc1fjmV6g==", + "version": "4.4.1", + "license": "BSD-2-Clause", "dependencies": { "punycode": "^2.1.0" } }, "node_modules/urix": { "version": "0.1.0", - "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", - "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=", - "deprecated": "Please see https://github.com/lydell/urix#deprecated", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/url": { "version": "0.11.0", - "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz", - "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=", "dev": true, + "license": "MIT", "dependencies": { "punycode": "1.3.2", "querystring": "0.2.0" } }, "node_modules/url-parse": { - "version": "1.4.7", - "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.4.7.tgz", - "integrity": "sha512-d3uaVyzDB9tQoSXFvuSUNFibTd9zxd2bkVrDRvF5TmvWWQwqE4lgYJ5m+x1DbecWkw+LK4RNl2CU1hHuOKPVlg==", + "version": "1.5.1", "dev": true, + "license": "MIT", "dependencies": { "querystringify": "^2.1.1", "requires-port": "^1.0.0" @@ -15172,127 +13641,70 @@ }, "node_modules/url/node_modules/punycode": { "version": "1.3.2", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", - "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/use": { "version": "3.1.1", - "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", - "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/util": { "version": "0.11.1", - "resolved": "https://registry.npmjs.org/util/-/util-0.11.1.tgz", - "integrity": "sha512-HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ==", "dev": true, + "license": "MIT", "dependencies": { "inherits": "2.0.3" } }, "node_modules/util-deprecate": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" - }, - "node_modules/util.promisify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/util.promisify/-/util.promisify-1.0.1.tgz", - "integrity": "sha512-g9JpC/3He3bm38zsLupWryXHoEcS22YHthuPQSJdMy6KNrzIRzWqcsHzD/WUnqe45whVou4VIsPew37DoXWNrA==", "dev": true, - "dependencies": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.2", - "has-symbols": "^1.0.1", - "object.getownpropertydescriptors": "^2.1.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/util.promisify/node_modules/es-abstract": { - "version": "1.17.7", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.7.tgz", - "integrity": "sha512-VBl/gnfcJ7OercKA9MVaegWsBHFjV492syMudcnQZvt/Dw8ezpcOHYZXa/J96O8vx+g4x65YKhxOwDUh63aS5g==", - "dev": true, - "dependencies": { - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.1", - "is-callable": "^1.2.2", - "is-regex": "^1.1.1", - "object-inspect": "^1.8.0", - "object-keys": "^1.1.1", - "object.assign": "^4.1.1", - "string.prototype.trimend": "^1.0.1", - "string.prototype.trimstart": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } + "license": "MIT" }, "node_modules/util/node_modules/inherits": { "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/utils-merge": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", - "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.4.0" } }, "node_modules/uuid": { "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "license": "MIT", "bin": { "uuid": "dist/bin/uuid" } }, "node_modules/validate-npm-package-name": { "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=", "dev": true, + "license": "ISC", "dependencies": { "builtins": "^1.0.3" } }, - "node_modules/varuint-bitcoin": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/varuint-bitcoin/-/varuint-bitcoin-1.1.2.tgz", - "integrity": "sha512-4EVb+w4rx+YfVM32HQX42AbbT7/1f5zwAYhIujKXKk8NQK+JfRVl3pqT3hjNn/L+RstigmGGKVwHA/P0wgITZw==", - "dependencies": { - "safe-buffer": "^5.1.1" - } - }, "node_modules/vary": { "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", - "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.8" } }, "node_modules/vendors": { "version": "1.0.4", - "resolved": "https://registry.npmjs.org/vendors/-/vendors-1.0.4.tgz", - "integrity": "sha512-/juG65kTL4Cy2su4P8HjtkTxk6VmJDiOPBufWniqQ6wknac6jNiXS9vU+hO3wgusiyqWlzTbVHi0dyJqRONg3w==", "dev": true, + "license": "MIT", "funding": { "type": "github", "url": "https://github.com/sponsors/wooorm" @@ -15300,12 +13712,11 @@ }, "node_modules/verror": { "version": "1.10.0", - "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", - "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", "dev": true, "engines": [ "node >=0.6.0" ], + "license": "MIT", "dependencies": { "assert-plus": "^1.0.0", "core-util-is": "1.0.2", @@ -15314,15 +13725,13 @@ }, "node_modules/vm-browserify": { "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-1.1.2.tgz", - "integrity": "sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/watchpack": { "version": "1.7.5", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.7.5.tgz", - "integrity": "sha512-9P3MWk6SrKjHsGkLT2KHXdQ/9SNkyoJbabxnKOoJepsvJjJG8uYTR3yTPxPQvNDI3w4Nz1xnE0TLHK4RIVe/MQ==", "dev": true, + "license": "MIT", "dependencies": { "graceful-fs": "^4.1.2", "neo-async": "^2.5.0" @@ -15334,9 +13743,8 @@ }, "node_modules/watchpack-chokidar2": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/watchpack-chokidar2/-/watchpack-chokidar2-2.0.1.tgz", - "integrity": "sha512-nCFfBIPKr5Sh61s4LPpy1Wtfi0HE8isJ3d2Yb5/Ppw2P2B/3eVSEBjKfN0fmHJSK14+31KwMKmcrzs2GM4P0Ww==", "dev": true, + "license": "MIT", "optional": true, "dependencies": { "chokidar": "^2.1.8" @@ -15344,9 +13752,8 @@ }, "node_modules/watchpack-chokidar2/node_modules/anymatch": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", - "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", "dev": true, + "license": "ISC", "optional": true, "dependencies": { "micromatch": "^3.1.4", @@ -15355,9 +13762,8 @@ }, "node_modules/watchpack-chokidar2/node_modules/anymatch/node_modules/normalize-path": { "version": "2.1.1", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", - "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", "dev": true, + "license": "MIT", "optional": true, "dependencies": { "remove-trailing-separator": "^1.0.1" @@ -15368,9 +13774,8 @@ }, "node_modules/watchpack-chokidar2/node_modules/binary-extensions": { "version": "1.13.1", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz", - "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==", "dev": true, + "license": "MIT", "optional": true, "engines": { "node": ">=0.10.0" @@ -15378,9 +13783,8 @@ }, "node_modules/watchpack-chokidar2/node_modules/braces": { "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", "dev": true, + "license": "MIT", "optional": true, "dependencies": { "arr-flatten": "^1.1.0", @@ -15400,9 +13804,8 @@ }, "node_modules/watchpack-chokidar2/node_modules/braces/node_modules/extend-shallow": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, + "license": "MIT", "optional": true, "dependencies": { "is-extendable": "^0.1.0" @@ -15413,10 +13816,8 @@ }, "node_modules/watchpack-chokidar2/node_modules/chokidar": { "version": "2.1.8", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz", - "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==", - "deprecated": "Chokidar 2 will break on node v14+. Upgrade to chokidar 3 with 15x less dependencies.", "dev": true, + "license": "MIT", "optional": true, "dependencies": { "anymatch": "^2.0.0", @@ -15437,9 +13838,8 @@ }, "node_modules/watchpack-chokidar2/node_modules/fill-range": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", "dev": true, + "license": "MIT", "optional": true, "dependencies": { "extend-shallow": "^2.0.1", @@ -15453,9 +13853,8 @@ }, "node_modules/watchpack-chokidar2/node_modules/fill-range/node_modules/extend-shallow": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, + "license": "MIT", "optional": true, "dependencies": { "is-extendable": "^0.1.0" @@ -15464,30 +13863,10 @@ "node": ">=0.10.0" } }, - "node_modules/watchpack-chokidar2/node_modules/fsevents": { - "version": "1.2.13", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz", - "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==", - "deprecated": "fsevents 1 will break on node v14+ and could be using insecure binaries. Upgrade to fsevents 2.", - "dev": true, - "hasInstallScript": true, - "optional": true, - "os": [ - "darwin" - ], - "dependencies": { - "bindings": "^1.5.0", - "nan": "^2.12.1" - }, - "engines": { - "node": ">= 4.0" - } - }, "node_modules/watchpack-chokidar2/node_modules/glob-parent": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", - "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", "dev": true, + "license": "ISC", "optional": true, "dependencies": { "is-glob": "^3.1.0", @@ -15496,9 +13875,8 @@ }, "node_modules/watchpack-chokidar2/node_modules/glob-parent/node_modules/is-glob": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", - "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", "dev": true, + "license": "MIT", "optional": true, "dependencies": { "is-extglob": "^2.1.0" @@ -15509,9 +13887,8 @@ }, "node_modules/watchpack-chokidar2/node_modules/is-binary-path": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", - "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", "dev": true, + "license": "MIT", "optional": true, "dependencies": { "binary-extensions": "^1.0.0" @@ -15520,11 +13897,19 @@ "node": ">=0.10.0" } }, + "node_modules/watchpack-chokidar2/node_modules/is-extendable": { + "version": "0.1.1", + "dev": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/watchpack-chokidar2/node_modules/is-number": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", "dev": true, + "license": "MIT", "optional": true, "dependencies": { "kind-of": "^3.0.2" @@ -15535,9 +13920,8 @@ }, "node_modules/watchpack-chokidar2/node_modules/is-number/node_modules/kind-of": { "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, + "license": "MIT", "optional": true, "dependencies": { "is-buffer": "^1.1.5" @@ -15548,16 +13932,14 @@ }, "node_modules/watchpack-chokidar2/node_modules/isarray": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", "dev": true, + "license": "MIT", "optional": true }, "node_modules/watchpack-chokidar2/node_modules/micromatch": { "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", "dev": true, + "license": "MIT", "optional": true, "dependencies": { "arr-diff": "^4.0.0", @@ -15580,9 +13962,8 @@ }, "node_modules/watchpack-chokidar2/node_modules/readable-stream": { "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", "dev": true, + "license": "MIT", "optional": true, "dependencies": { "core-util-is": "~1.0.0", @@ -15596,9 +13977,8 @@ }, "node_modules/watchpack-chokidar2/node_modules/readdirp": { "version": "2.2.1", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz", - "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", "dev": true, + "license": "MIT", "optional": true, "dependencies": { "graceful-fs": "^4.1.11", @@ -15609,18 +13989,10 @@ "node": ">=0.10" } }, - "node_modules/watchpack-chokidar2/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true, - "optional": true - }, "node_modules/watchpack-chokidar2/node_modules/string_decoder": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "dev": true, + "license": "MIT", "optional": true, "dependencies": { "safe-buffer": "~5.1.0" @@ -15628,9 +14000,8 @@ }, "node_modules/watchpack-chokidar2/node_modules/to-regex-range": { "version": "2.1.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", - "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", "dev": true, + "license": "MIT", "optional": true, "dependencies": { "is-number": "^3.0.0", @@ -15642,27 +14013,24 @@ }, "node_modules/wbuf": { "version": "1.7.3", - "resolved": "https://registry.npmjs.org/wbuf/-/wbuf-1.7.3.tgz", - "integrity": "sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==", "dev": true, + "license": "MIT", "dependencies": { "minimalistic-assert": "^1.0.0" } }, "node_modules/wcwidth": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", - "integrity": "sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g=", "dev": true, + "license": "MIT", "dependencies": { "defaults": "^1.0.3" } }, "node_modules/webpack": { "version": "4.44.2", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.44.2.tgz", - "integrity": "sha512-6KJVGlCxYdISyurpQ0IPTklv+DULv05rs2hseIXer6D7KrUicRDLFb4IUM1S6LUAKypPM/nSiVSuv8jHu1m3/Q==", "dev": true, + "license": "MIT", "dependencies": { "@webassemblyjs/ast": "1.9.0", "@webassemblyjs/helper-module-context": "1.9.0", @@ -15709,9 +14077,8 @@ }, "node_modules/webpack-dev-middleware": { "version": "3.7.2", - "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-3.7.2.tgz", - "integrity": "sha512-1xC42LxbYoqLNAhV6YzTYacicgMZQTqRd27Sim9wn5hJrX3I5nxYy1SxSd4+gjUFsz1dQFj+yEe6zEVmSkeJjw==", "dev": true, + "license": "MIT", "dependencies": { "memory-fs": "^0.4.1", "mime": "^2.4.4", @@ -15727,10 +14094,9 @@ } }, "node_modules/webpack-dev-middleware/node_modules/mime": { - "version": "2.4.6", - "resolved": "https://registry.npmjs.org/mime/-/mime-2.4.6.tgz", - "integrity": "sha512-RZKhC3EmpBchfTGBVb8fb+RL2cWyw/32lshnsETttkBAyAUXSGHxbEJWWRXc751DrIxG1q04b8QwMbAwkRPpUA==", + "version": "2.5.2", "dev": true, + "license": "MIT", "bin": { "mime": "cli.js" }, @@ -15738,11 +14104,21 @@ "node": ">=4.0.0" } }, - "node_modules/webpack-dev-server": { - "version": "3.11.0", - "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-3.11.0.tgz", - "integrity": "sha512-PUxZ+oSTxogFQgkTtFndEtJIPNmml7ExwufBZ9L2/Xyyd5PnOL5UreWe5ZT7IU25DSdykL9p1MLQzmLh2ljSeg==", + "node_modules/webpack-dev-middleware/node_modules/mkdirp": { + "version": "0.5.5", "dev": true, + "license": "MIT", + "dependencies": { + "minimist": "^1.2.5" + }, + "bin": { + "mkdirp": "bin/cmd.js" + } + }, + "node_modules/webpack-dev-server": { + "version": "3.11.2", + "dev": true, + "license": "MIT", "dependencies": { "ansi-html": "0.0.7", "bonjour": "^3.5.0", @@ -15764,11 +14140,11 @@ "p-retry": "^3.0.1", "portfinder": "^1.0.26", "schema-utils": "^1.0.0", - "selfsigned": "^1.10.7", + "selfsigned": "^1.10.8", "semver": "^6.3.0", "serve-index": "^1.9.1", - "sockjs": "0.3.20", - "sockjs-client": "1.4.0", + "sockjs": "^0.3.21", + "sockjs-client": "^1.5.0", "spdy": "^4.0.2", "strip-ansi": "^3.0.1", "supports-color": "^6.1.0", @@ -15795,18 +14171,16 @@ }, "node_modules/webpack-dev-server/node_modules/ansi-regex": { "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/webpack-dev-server/node_modules/anymatch": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", - "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", "dev": true, + "license": "ISC", "dependencies": { "micromatch": "^3.1.4", "normalize-path": "^2.1.1" @@ -15814,9 +14188,8 @@ }, "node_modules/webpack-dev-server/node_modules/anymatch/node_modules/normalize-path": { "version": "2.1.1", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", - "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", "dev": true, + "license": "MIT", "dependencies": { "remove-trailing-separator": "^1.0.1" }, @@ -15826,18 +14199,16 @@ }, "node_modules/webpack-dev-server/node_modules/binary-extensions": { "version": "1.13.1", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz", - "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/webpack-dev-server/node_modules/braces": { "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", "dev": true, + "license": "MIT", "dependencies": { "arr-flatten": "^1.1.0", "array-unique": "^0.3.2", @@ -15856,9 +14227,8 @@ }, "node_modules/webpack-dev-server/node_modules/braces/node_modules/extend-shallow": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, + "license": "MIT", "dependencies": { "is-extendable": "^0.1.0" }, @@ -15866,12 +14236,18 @@ "node": ">=0.10.0" } }, + "node_modules/webpack-dev-server/node_modules/camelcase": { + "version": "5.3.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, "node_modules/webpack-dev-server/node_modules/chokidar": { "version": "2.1.8", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz", - "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==", - "deprecated": "Chokidar 2 will break on node v14+. Upgrade to chokidar 3 with 15x less dependencies.", "dev": true, + "license": "MIT", "dependencies": { "anymatch": "^2.0.0", "async-each": "^1.0.1", @@ -15889,11 +14265,44 @@ "fsevents": "^1.2.7" } }, + "node_modules/webpack-dev-server/node_modules/cliui": { + "version": "5.0.0", + "dev": true, + "license": "ISC", + "dependencies": { + "string-width": "^3.1.0", + "strip-ansi": "^5.2.0", + "wrap-ansi": "^5.1.0" + } + }, + "node_modules/webpack-dev-server/node_modules/cliui/node_modules/ansi-regex": { + "version": "4.1.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/webpack-dev-server/node_modules/cliui/node_modules/strip-ansi": { + "version": "5.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^4.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/webpack-dev-server/node_modules/emoji-regex": { + "version": "7.0.3", + "dev": true, + "license": "MIT" + }, "node_modules/webpack-dev-server/node_modules/fill-range": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", "dev": true, + "license": "MIT", "dependencies": { "extend-shallow": "^2.0.1", "is-number": "^3.0.0", @@ -15906,9 +14315,8 @@ }, "node_modules/webpack-dev-server/node_modules/fill-range/node_modules/extend-shallow": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, + "license": "MIT", "dependencies": { "is-extendable": "^0.1.0" }, @@ -15916,30 +14324,21 @@ "node": ">=0.10.0" } }, - "node_modules/webpack-dev-server/node_modules/fsevents": { - "version": "1.2.13", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz", - "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==", - "deprecated": "fsevents 1 will break on node v14+ and could be using insecure binaries. Upgrade to fsevents 2.", + "node_modules/webpack-dev-server/node_modules/find-up": { + "version": "3.0.0", "dev": true, - "hasInstallScript": true, - "optional": true, - "os": [ - "darwin" - ], + "license": "MIT", "dependencies": { - "bindings": "^1.5.0", - "nan": "^2.12.1" + "locate-path": "^3.0.0" }, "engines": { - "node": ">= 4.0" + "node": ">=6" } }, "node_modules/webpack-dev-server/node_modules/glob-parent": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", - "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", "dev": true, + "license": "ISC", "dependencies": { "is-glob": "^3.1.0", "path-dirname": "^1.0.0" @@ -15947,9 +14346,8 @@ }, "node_modules/webpack-dev-server/node_modules/glob-parent/node_modules/is-glob": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", - "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", "dev": true, + "license": "MIT", "dependencies": { "is-extglob": "^2.1.0" }, @@ -15957,20 +14355,10 @@ "node": ">=0.10.0" } }, - "node_modules/webpack-dev-server/node_modules/is-absolute-url": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-3.0.3.tgz", - "integrity": "sha512-opmNIX7uFnS96NtPmhWQgQx6/NYFgsUXYMllcfzwWKUMwfo8kku1TvE6hkNcH+Q1ts5cMVrsY7j0bxXQDciu9Q==", - "dev": true, - "engines": { - "node": ">=8" - } - }, "node_modules/webpack-dev-server/node_modules/is-binary-path": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", - "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", "dev": true, + "license": "MIT", "dependencies": { "binary-extensions": "^1.0.0" }, @@ -15978,11 +14366,26 @@ "node": ">=0.10.0" } }, + "node_modules/webpack-dev-server/node_modules/is-extendable": { + "version": "0.1.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/webpack-dev-server/node_modules/is-fullwidth-code-point": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, "node_modules/webpack-dev-server/node_modules/is-number": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", "dev": true, + "license": "MIT", "dependencies": { "kind-of": "^3.0.2" }, @@ -15992,9 +14395,8 @@ }, "node_modules/webpack-dev-server/node_modules/is-number/node_modules/kind-of": { "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, + "license": "MIT", "dependencies": { "is-buffer": "^1.1.5" }, @@ -16004,15 +14406,25 @@ }, "node_modules/webpack-dev-server/node_modules/isarray": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true + "dev": true, + "license": "MIT" + }, + "node_modules/webpack-dev-server/node_modules/locate-path": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + }, + "engines": { + "node": ">=6" + } }, "node_modules/webpack-dev-server/node_modules/micromatch": { "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", "dev": true, + "license": "MIT", "dependencies": { "arr-diff": "^4.0.0", "array-unique": "^0.3.2", @@ -16032,11 +14444,43 @@ "node": ">=0.10.0" } }, + "node_modules/webpack-dev-server/node_modules/p-limit": { + "version": "2.3.0", + "dev": true, + "license": "MIT", + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/webpack-dev-server/node_modules/p-locate": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "p-limit": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/webpack-dev-server/node_modules/path-exists": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, "node_modules/webpack-dev-server/node_modules/readable-stream": { "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", "dev": true, + "license": "MIT", "dependencies": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", @@ -16049,9 +14493,8 @@ }, "node_modules/webpack-dev-server/node_modules/readdirp": { "version": "2.2.1", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz", - "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", "dev": true, + "license": "MIT", "dependencies": { "graceful-fs": "^4.1.11", "micromatch": "^3.1.10", @@ -16061,17 +14504,10 @@ "node": ">=0.10" } }, - "node_modules/webpack-dev-server/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, "node_modules/webpack-dev-server/node_modules/schema-utils": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", - "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", "dev": true, + "license": "MIT", "dependencies": { "ajv": "^6.1.0", "ajv-errors": "^1.0.0", @@ -16083,27 +14519,56 @@ }, "node_modules/webpack-dev-server/node_modules/semver": { "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", "dev": true, + "license": "ISC", "bin": { "semver": "bin/semver.js" } }, "node_modules/webpack-dev-server/node_modules/string_decoder": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "dev": true, + "license": "MIT", "dependencies": { "safe-buffer": "~5.1.0" } }, + "node_modules/webpack-dev-server/node_modules/string-width": { + "version": "3.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/webpack-dev-server/node_modules/string-width/node_modules/ansi-regex": { + "version": "4.1.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/webpack-dev-server/node_modules/string-width/node_modules/strip-ansi": { + "version": "5.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^4.1.0" + }, + "engines": { + "node": ">=6" + } + }, "node_modules/webpack-dev-server/node_modules/strip-ansi": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", "dev": true, + "license": "MIT", "dependencies": { "ansi-regex": "^2.0.0" }, @@ -16113,9 +14578,8 @@ }, "node_modules/webpack-dev-server/node_modules/supports-color": { "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", "dev": true, + "license": "MIT", "dependencies": { "has-flag": "^3.0.0" }, @@ -16125,9 +14589,8 @@ }, "node_modules/webpack-dev-server/node_modules/to-regex-range": { "version": "2.1.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", - "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", "dev": true, + "license": "MIT", "dependencies": { "is-number": "^3.0.0", "repeat-string": "^1.6.1" @@ -16136,11 +14599,81 @@ "node": ">=0.10.0" } }, + "node_modules/webpack-dev-server/node_modules/wrap-ansi": { + "version": "5.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^3.2.0", + "string-width": "^3.0.0", + "strip-ansi": "^5.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/webpack-dev-server/node_modules/wrap-ansi/node_modules/ansi-regex": { + "version": "4.1.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/webpack-dev-server/node_modules/wrap-ansi/node_modules/strip-ansi": { + "version": "5.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^4.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/webpack-dev-server/node_modules/ws": { + "version": "6.2.2", + "dev": true, + "license": "MIT", + "dependencies": { + "async-limiter": "~1.0.0" + } + }, + "node_modules/webpack-dev-server/node_modules/y18n": { + "version": "4.0.3", + "dev": true, + "license": "ISC" + }, + "node_modules/webpack-dev-server/node_modules/yargs": { + "version": "13.3.2", + "dev": true, + "license": "MIT", + "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" + } + }, + "node_modules/webpack-dev-server/node_modules/yargs-parser": { + "version": "13.1.2", + "dev": true, + "license": "ISC", + "dependencies": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + } + }, "node_modules/webpack-log": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/webpack-log/-/webpack-log-2.0.0.tgz", - "integrity": "sha512-cX8G2vR/85UYG59FgkoMamwHUIkSSlV3bBMRsbxVXVUk2j6NleCKjQ/WE9eYg9WY4w25O9w8wKP4rzNZFmUcUg==", "dev": true, + "license": "MIT", "dependencies": { "ansi-colors": "^3.0.0", "uuid": "^3.3.2" @@ -16151,28 +14684,24 @@ }, "node_modules/webpack-log/node_modules/ansi-colors": { "version": "3.2.4", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-3.2.4.tgz", - "integrity": "sha512-hHUXGagefjN2iRrID63xckIvotOXOojhQKWIPUZ4mNUZ9nLZW+7FMNoE1lOkEhNWYsx/7ysGIuJYCiMAA9FnrA==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } }, "node_modules/webpack-log/node_modules/uuid": { "version": "3.4.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", - "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", - "deprecated": "Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.", "dev": true, + "license": "MIT", "bin": { "uuid": "bin/uuid" } }, "node_modules/webpack-merge": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.2.0.tgz", - "integrity": "sha512-QBglJBg5+lItm3/Lopv8KDDK01+hjdg2azEwi/4vKJ8ZmGPdtJsTpjtNNOW3a4WiqzXdCATtTudOZJngE7RKkA==", + "version": "5.7.3", "dev": true, + "license": "MIT", "dependencies": { "clone-deep": "^4.0.1", "wildcard": "^2.0.0" @@ -16182,20 +14711,29 @@ } }, "node_modules/webpack-sources": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.4.3.tgz", - "integrity": "sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==", + "version": "2.2.0", "dev": true, + "license": "MIT", "dependencies": { - "source-list-map": "^2.0.0", - "source-map": "~0.6.1" + "source-list-map": "^2.0.1", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/webpack-sources/node_modules/source-map": { + "version": "0.6.1", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" } }, "node_modules/webpack-subresource-integrity": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/webpack-subresource-integrity/-/webpack-subresource-integrity-1.5.1.tgz", - "integrity": "sha512-uekbQ93PZ9e7BFB8Hl9cFIVYQyQqiXp2ExKk9Zv+qZfH/zHXHrCFAfw1VW0+NqWbTWrs/HnuDrto3+tiPXh//Q==", + "version": "1.5.2", "dev": true, + "license": "MIT", "dependencies": { "webpack-sources": "^1.3.0" }, @@ -16212,11 +14750,27 @@ } } }, + "node_modules/webpack-subresource-integrity/node_modules/source-map": { + "version": "0.6.1", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/webpack-subresource-integrity/node_modules/webpack-sources": { + "version": "1.4.3", + "dev": true, + "license": "MIT", + "dependencies": { + "source-list-map": "^2.0.0", + "source-map": "~0.6.1" + } + }, "node_modules/webpack/node_modules/braces": { "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", "dev": true, + "license": "MIT", "dependencies": { "arr-flatten": "^1.1.0", "array-unique": "^0.3.2", @@ -16235,9 +14789,8 @@ }, "node_modules/webpack/node_modules/braces/node_modules/extend-shallow": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, + "license": "MIT", "dependencies": { "is-extendable": "^0.1.0" }, @@ -16247,9 +14800,8 @@ }, "node_modules/webpack/node_modules/cacache": { "version": "12.0.4", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-12.0.4.tgz", - "integrity": "sha512-a0tMB40oefvuInr4Cwb3GerbL9xTj1D5yg0T5xrjGCGyfvbxseIXX7BAO/u/hIXdafzOI5JC3wDwHyf24buOAQ==", "dev": true, + "license": "ISC", "dependencies": { "bluebird": "^3.5.5", "chownr": "^1.1.1", @@ -16270,14 +14822,16 @@ }, "node_modules/webpack/node_modules/chownr": { "version": "1.1.4", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", - "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", - "dev": true + "dev": true, + "license": "ISC" + }, + "node_modules/webpack/node_modules/commander": { + "version": "2.20.3", + "dev": true, + "license": "MIT" }, "node_modules/webpack/node_modules/enhanced-resolve": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.3.0.tgz", - "integrity": "sha512-3e87LvavsdxyoCfGusJnrZ5G8SLPOFeHSNpZI/ATL9a5leXo2k0w6MKnbqhdBad9qTobSfB20Ld7UmgoNbAZkQ==", + "version": "4.5.0", "dev": true, "dependencies": { "graceful-fs": "^4.1.2", @@ -16290,9 +14844,8 @@ }, "node_modules/webpack/node_modules/enhanced-resolve/node_modules/memory-fs": { "version": "0.5.0", - "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.5.0.tgz", - "integrity": "sha512-jA0rdU5KoQMC0e6ppoNRtpp6vjFq6+NY7r8hywnC7V+1Xj/MtHwGIbB1QaK/dunyjWteJzmkpd7ooeWg10T7GA==", "dev": true, + "license": "MIT", "dependencies": { "errno": "^0.1.3", "readable-stream": "^2.0.1" @@ -16303,9 +14856,8 @@ }, "node_modules/webpack/node_modules/fill-range": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", "dev": true, + "license": "MIT", "dependencies": { "extend-shallow": "^2.0.1", "is-number": "^3.0.0", @@ -16318,9 +14870,8 @@ }, "node_modules/webpack/node_modules/fill-range/node_modules/extend-shallow": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, + "license": "MIT", "dependencies": { "is-extendable": "^0.1.0" }, @@ -16330,9 +14881,8 @@ }, "node_modules/webpack/node_modules/find-cache-dir": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.1.0.tgz", - "integrity": "sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==", "dev": true, + "license": "MIT", "dependencies": { "commondir": "^1.0.1", "make-dir": "^2.0.0", @@ -16342,11 +14892,29 @@ "node": ">=6" } }, + "node_modules/webpack/node_modules/find-up": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "locate-path": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/webpack/node_modules/is-extendable": { + "version": "0.1.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/webpack/node_modules/is-number": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", "dev": true, + "license": "MIT", "dependencies": { "kind-of": "^3.0.2" }, @@ -16356,9 +14924,8 @@ }, "node_modules/webpack/node_modules/is-number/node_modules/kind-of": { "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, + "license": "MIT", "dependencies": { "is-buffer": "^1.1.5" }, @@ -16368,24 +14935,21 @@ }, "node_modules/webpack/node_modules/is-wsl": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", - "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } }, "node_modules/webpack/node_modules/isarray": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/webpack/node_modules/json5": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", "dev": true, + "license": "MIT", "dependencies": { "minimist": "^1.2.0" }, @@ -16395,9 +14959,8 @@ }, "node_modules/webpack/node_modules/loader-utils": { "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", - "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", "dev": true, + "license": "MIT", "dependencies": { "big.js": "^5.2.2", "emojis-list": "^3.0.0", @@ -16407,20 +14970,42 @@ "node": ">=4.0.0" } }, + "node_modules/webpack/node_modules/locate-path": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, "node_modules/webpack/node_modules/lru-cache": { "version": "5.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", "dev": true, + "license": "ISC", "dependencies": { "yallist": "^3.0.2" } }, + "node_modules/webpack/node_modules/make-dir": { + "version": "2.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "pify": "^4.0.1", + "semver": "^5.6.0" + }, + "engines": { + "node": ">=6" + } + }, "node_modules/webpack/node_modules/micromatch": { "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", "dev": true, + "license": "MIT", "dependencies": { "arr-diff": "^4.0.0", "array-unique": "^0.3.2", @@ -16440,11 +15025,73 @@ "node": ">=0.10.0" } }, + "node_modules/webpack/node_modules/mkdirp": { + "version": "0.5.5", + "dev": true, + "license": "MIT", + "dependencies": { + "minimist": "^1.2.5" + }, + "bin": { + "mkdirp": "bin/cmd.js" + } + }, + "node_modules/webpack/node_modules/p-limit": { + "version": "2.3.0", + "dev": true, + "license": "MIT", + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/webpack/node_modules/p-locate": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "p-limit": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/webpack/node_modules/path-exists": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/webpack/node_modules/pify": { + "version": "4.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/webpack/node_modules/pkg-dir": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "find-up": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, "node_modules/webpack/node_modules/readable-stream": { "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", "dev": true, + "license": "MIT", "dependencies": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", @@ -16457,9 +15104,8 @@ }, "node_modules/webpack/node_modules/rimraf": { "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", "dev": true, + "license": "ISC", "dependencies": { "glob": "^7.1.3" }, @@ -16467,17 +15113,10 @@ "rimraf": "bin.js" } }, - "node_modules/webpack/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, "node_modules/webpack/node_modules/schema-utils": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", - "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", "dev": true, + "license": "MIT", "dependencies": { "ajv": "^6.1.0", "ajv-errors": "^1.0.0", @@ -16487,38 +15126,58 @@ "node": ">= 4" } }, - "node_modules/webpack/node_modules/ssri": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-6.0.1.tgz", - "integrity": "sha512-3Wge10hNcT1Kur4PDFwEieXSCMCJs/7WvSACcrMYrNp+b8kDL1/0wJch5Ni2WrtwEa2IO8OsVfeKIciKCDx/QA==", + "node_modules/webpack/node_modules/semver": { + "version": "5.7.1", "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/webpack/node_modules/serialize-javascript": { + "version": "4.0.0", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "randombytes": "^2.1.0" + } + }, + "node_modules/webpack/node_modules/source-map": { + "version": "0.6.1", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/webpack/node_modules/ssri": { + "version": "6.0.2", + "dev": true, + "license": "ISC", "dependencies": { "figgy-pudding": "^3.5.1" } }, "node_modules/webpack/node_modules/string_decoder": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "dev": true, + "license": "MIT", "dependencies": { "safe-buffer": "~5.1.0" } }, "node_modules/webpack/node_modules/tapable": { "version": "1.1.3", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz", - "integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } }, "node_modules/webpack/node_modules/terser": { "version": "4.8.0", - "resolved": "https://registry.npmjs.org/terser/-/terser-4.8.0.tgz", - "integrity": "sha512-EAPipTNeWsb/3wLPeup1tVPaXfIaU68xMnVdPafIL1TV05OhASArYyIfFvnvJCNrR2NIOvDVNNTFRa+Re2MWyw==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "commander": "^2.20.0", "source-map": "~0.6.1", @@ -16533,9 +15192,8 @@ }, "node_modules/webpack/node_modules/terser-webpack-plugin": { "version": "1.4.5", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-1.4.5.tgz", - "integrity": "sha512-04Rfe496lN8EYruwi6oPQkG0vo8C+HT49X687FZnpPF0qMAIHONI6HEXYPKDOE8e5HjXTyKfqRd/agHtH0kOtw==", "dev": true, + "license": "MIT", "dependencies": { "cacache": "^12.0.2", "find-cache-dir": "^2.1.0", @@ -16556,9 +15214,8 @@ }, "node_modules/webpack/node_modules/to-regex-range": { "version": "2.1.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", - "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", "dev": true, + "license": "MIT", "dependencies": { "is-number": "^3.0.0", "repeat-string": "^1.6.1" @@ -16567,79 +15224,97 @@ "node": ">=0.10.0" } }, + "node_modules/webpack/node_modules/webpack-sources": { + "version": "1.4.3", + "dev": true, + "license": "MIT", + "dependencies": { + "source-list-map": "^2.0.0", + "source-map": "~0.6.1" + } + }, + "node_modules/webpack/node_modules/y18n": { + "version": "4.0.3", + "dev": true, + "license": "ISC" + }, "node_modules/webpack/node_modules/yallist": { "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/websocket-driver": { - "version": "0.6.5", - "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.6.5.tgz", - "integrity": "sha1-XLJVbOuF9Dc8bYI4qmkchFThOjY=", + "version": "0.7.4", "dev": true, + "license": "Apache-2.0", "dependencies": { + "http-parser-js": ">=0.5.1", + "safe-buffer": ">=5.1.0", "websocket-extensions": ">=0.1.1" }, "engines": { - "node": ">=0.6.0" + "node": ">=0.8.0" } }, "node_modules/websocket-extensions": { "version": "0.1.4", - "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.4.tgz", - "integrity": "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==", "dev": true, + "license": "Apache-2.0", "engines": { "node": ">=0.8.0" } }, "node_modules/whatwg-mimetype": { "version": "2.3.0", - "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz", - "integrity": "sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "version": "2.0.2", "dev": true, + "license": "ISC", "dependencies": { "isexe": "^2.0.0" }, "bin": { - "which": "bin/which" + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" } }, "node_modules/which-module": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", - "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=" + "license": "ISC" }, "node_modules/wide-align": { "version": "1.1.3", - "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz", - "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==", "dev": true, + "license": "ISC", "dependencies": { "string-width": "^1.0.2 || 2" } }, "node_modules/wide-align/node_modules/ansi-regex": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/wide-align/node_modules/is-fullwidth-code-point": { + "version": "2.0.0", + "dev": true, + "license": "MIT", "engines": { "node": ">=4" } }, "node_modules/wide-align/node_modules/string-width": { "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", "dev": true, + "license": "MIT", "dependencies": { "is-fullwidth-code-point": "^2.0.0", "strip-ansi": "^4.0.0" @@ -16650,9 +15325,8 @@ }, "node_modules/wide-align/node_modules/strip-ansi": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", "dev": true, + "license": "MIT", "dependencies": { "ansi-regex": "^3.0.0" }, @@ -16660,39 +15334,27 @@ "node": ">=4" } }, - "node_modules/wif": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/wif/-/wif-2.0.6.tgz", - "integrity": "sha1-CNP1IFbGZnkplyb63g1DKudLRwQ=", - "dependencies": { - "bs58check": "<3.0.0" - } - }, "node_modules/wildcard": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.0.tgz", - "integrity": "sha512-JcKqAHLPxcdb9KM49dufGXn2x3ssnfjbcaQdLlfZsL9rH9wgDQjUtDxbo8NE0F6SFvydeu1VhZe7hZuHsB2/pw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/wordwrap": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", - "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=" + "license": "MIT" }, "node_modules/worker-farm": { "version": "1.7.0", - "resolved": "https://registry.npmjs.org/worker-farm/-/worker-farm-1.7.0.tgz", - "integrity": "sha512-rvw3QTZc8lAxyVrqcSGVm5yP/IJ2UcB3U0graE3LCFoZ0Yn2x4EoVSqJKdB/T5M+FLcRPjz4TDacRf3OCfNUzw==", "dev": true, + "license": "MIT", "dependencies": { "errno": "~0.1.7" } }, "node_modules/worker-plugin": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/worker-plugin/-/worker-plugin-5.0.0.tgz", - "integrity": "sha512-AXMUstURCxDD6yGam2r4E34aJg6kW85IiaeX72hi+I1cxyaMUtrvVY6sbfpGKAj5e7f68Acl62BjQF5aOOx2IQ==", "dev": true, + "license": "Apache-2.0", "dependencies": { "loader-utils": "^1.1.0" }, @@ -16702,9 +15364,8 @@ }, "node_modules/worker-plugin/node_modules/json5": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", "dev": true, + "license": "MIT", "dependencies": { "minimist": "^1.2.0" }, @@ -16714,9 +15375,8 @@ }, "node_modules/worker-plugin/node_modules/loader-utils": { "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", - "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", "dev": true, + "license": "MIT", "dependencies": { "big.js": "^5.2.2", "emojis-list": "^3.0.0", @@ -16727,29 +15387,60 @@ } }, "node_modules/wrap-ansi": { - "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==", + "version": "7.0.0", + "dev": true, + "license": "MIT", "dependencies": { - "ansi-styles": "^3.2.0", - "string-width": "^3.0.0", - "strip-ansi": "^5.0.0" + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" }, "engines": { - "node": ">=6" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, + "node_modules/wrap-ansi/node_modules/ansi-styles": { + "version": "4.3.0", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/wrap-ansi/node_modules/color-convert": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/wrap-ansi/node_modules/color-name": { + "version": "1.1.4", + "dev": true, + "license": "MIT" + }, "node_modules/wrappy": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/write-file-atomic": { "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==", "dev": true, + "license": "ISC", "dependencies": { "imurmurhash": "^0.1.4", "is-typedarray": "^1.0.0", @@ -16758,83 +15449,91 @@ } }, "node_modules/ws": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.1.tgz", - "integrity": "sha512-GIyAXC2cB7LjvpgMt9EKS2ldqr0MTrORaleiOno6TweZ6r3TKtoFQWay/2PceJ3RuBasOHzXNn5Lrw1X0bEjqA==", + "version": "7.5.3", "dev": true, - "dependencies": { - "async-limiter": "~1.0.0" + "license": "MIT", + "engines": { + "node": ">=8.3.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } } }, "node_modules/xtend": { "version": "4.0.2", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", - "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.4" } }, "node_modules/y18n": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.1.tgz", - "integrity": "sha512-wNcy4NvjMYL8gogWWYAO7ZFWFfHcbdbE57tZO8e4cbpj8tfUcwrwqSl3ad8HxpYWCdXcJUCeKKZS62Av1affwQ==" + "version": "5.0.8", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=10" + } }, "node_modules/yallist": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/yaml": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.0.tgz", - "integrity": "sha512-yr2icI4glYaNG+KWONODapy2/jDdMSDnrONSjblABjD9B4Z5LgiircSt8m8sRZFNi08kG9Sm0uSHtEmP3zaEGg==", + "version": "1.10.2", "dev": true, + "license": "ISC", "engines": { "node": ">= 6" } }, "node_modules/yargs": { - "version": "13.3.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz", - "integrity": "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==", + "version": "16.2.0", + "dev": true, + "license": "MIT", "dependencies": { - "cliui": "^5.0.0", - "find-up": "^3.0.0", - "get-caller-file": "^2.0.1", + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", "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" + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + }, + "engines": { + "node": ">=10" } }, "node_modules/yargs-parser": { - "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" + "version": "20.2.9", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=10" } }, "node_modules/yn": { "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", - "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } }, "node_modules/yocto-queue": { "version": "0.1.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" }, @@ -16843,9 +15542,8 @@ } }, "node_modules/zone.js": { - "version": "0.11.3", - "resolved": "https://registry.npmjs.org/zone.js/-/zone.js-0.11.3.tgz", - "integrity": "sha512-Y4hTHoh4VcxU5BDGAqEoOnOiyT254w6CiHtpQxAJUSMZPyVgdbKf+5R7Mwz6xsPhMIeBXk5rTopRZDpjssTCUg==", + "version": "0.11.4", + "license": "MIT", "dependencies": { "tslib": "^2.0.0" } @@ -16853,385 +15551,157 @@ }, "dependencies": { "@angular-devkit/architect": { - "version": "0.1100.3", - "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1100.3.tgz", - "integrity": "sha512-PF4PlGOIVW8eYAObP7B/vfk8TaHBEWzr2NOb+kHsIJJmx11iivkHRWzzQmTUlhwnRslCcg5ngwx0IBPDzNVeTg==", + "version": "0.1102.14", "dev": true, "requires": { - "@angular-devkit/core": "11.0.3", + "@angular-devkit/core": "11.2.14", "rxjs": "6.6.3" }, "dependencies": { - "@angular-devkit/core": { - "version": "11.0.3", - "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-11.0.3.tgz", - "integrity": "sha512-gJRiBj0gWDR2VtIvLvwwc/GM2MZvg1xw69ZbBJ1VuUgDqPBHdC8q3UMW3B82wdhxK+RBYa7ZOJxtIVggaHkm9g==", + "rxjs": { + "version": "6.6.3", "dev": true, "requires": { - "ajv": "6.12.6", - "fast-json-stable-stringify": "2.1.0", - "magic-string": "0.25.7", - "rxjs": "6.6.3", - "source-map": "0.7.3" + "tslib": "^1.9.0" } }, - "source-map": { - "version": "0.7.3", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", - "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", + "tslib": { + "version": "1.14.1", "dev": true } } }, "@angular-devkit/build-angular": { - "version": "0.1100.3", - "resolved": "https://registry.npmjs.org/@angular-devkit/build-angular/-/build-angular-0.1100.3.tgz", - "integrity": "sha512-4Zng6I+QOPFx6uAdNxgKDYXeHYvowU2bANtsG0KFDxc5RN64FyqK2lZlTUPS6SejX14hOyj81/f4MIl25r7Xgg==", + "version": "0.1102.14", "dev": true, "requires": { - "@angular-devkit/architect": "0.1100.3", - "@angular-devkit/build-optimizer": "0.1100.3", - "@angular-devkit/build-webpack": "0.1100.3", - "@angular-devkit/core": "11.0.3", - "@babel/core": "7.12.3", - "@babel/generator": "7.12.1", - "@babel/plugin-transform-runtime": "7.12.1", - "@babel/preset-env": "7.12.1", - "@babel/runtime": "7.12.1", - "@babel/template": "7.10.4", + "@angular-devkit/architect": "0.1102.14", + "@angular-devkit/build-optimizer": "0.1102.14", + "@angular-devkit/build-webpack": "0.1102.14", + "@angular-devkit/core": "11.2.14", + "@babel/core": "7.12.10", + "@babel/generator": "7.12.11", + "@babel/plugin-transform-async-to-generator": "7.12.1", + "@babel/plugin-transform-runtime": "7.12.10", + "@babel/preset-env": "7.12.11", + "@babel/runtime": "7.12.5", + "@babel/template": "7.12.7", + "@discoveryjs/json-ext": "0.5.2", "@jsdevtools/coverage-istanbul-loader": "3.0.5", - "@ngtools/webpack": "11.0.3", + "@ngtools/webpack": "11.2.14", "ansi-colors": "4.1.1", - "autoprefixer": "9.8.6", - "babel-loader": "8.1.0", + "autoprefixer": "10.2.4", + "babel-loader": "8.2.2", "browserslist": "^4.9.1", "cacache": "15.0.5", "caniuse-lite": "^1.0.30001032", - "circular-dependency-plugin": "5.2.0", - "copy-webpack-plugin": "6.2.1", - "core-js": "3.6.5", - "css-loader": "4.3.0", - "cssnano": "4.1.10", - "file-loader": "6.1.1", + "circular-dependency-plugin": "5.2.2", + "copy-webpack-plugin": "6.3.2", + "core-js": "3.8.3", + "critters": "0.0.7", + "css-loader": "5.0.1", + "cssnano": "5.0.2", + "file-loader": "6.2.0", "find-cache-dir": "3.3.1", "glob": "7.1.6", + "https-proxy-agent": "5.0.0", "inquirer": "7.3.3", - "jest-worker": "26.5.0", + "jest-worker": "26.6.2", "karma-source-map-support": "1.4.0", - "less": "3.12.2", - "less-loader": "7.0.2", - "license-webpack-plugin": "2.3.1", + "less": "4.1.1", + "less-loader": "7.3.0", + "license-webpack-plugin": "2.3.11", "loader-utils": "2.0.0", - "mini-css-extract-plugin": "1.2.1", + "mini-css-extract-plugin": "1.3.5", "minimatch": "3.0.4", - "open": "7.3.0", - "ora": "5.1.0", + "open": "7.4.0", + "ora": "5.3.0", "parse5-html-rewriting-stream": "6.0.1", "pnp-webpack-plugin": "1.6.4", - "postcss": "7.0.32", - "postcss-import": "12.0.1", - "postcss-loader": "4.0.4", + "postcss": "8.2.15", + "postcss-import": "14.0.0", + "postcss-loader": "4.2.0", "raw-loader": "4.0.2", "regenerator-runtime": "0.13.7", - "resolve-url-loader": "3.1.2", + "resolve-url-loader": "4.0.0", "rimraf": "3.0.2", - "rollup": "2.32.1", + "rollup": "2.38.4", "rxjs": "6.6.3", - "sass": "1.27.0", - "sass-loader": "10.0.5", - "semver": "7.3.2", + "sass": "1.32.6", + "sass-loader": "10.1.1", + "semver": "7.3.4", "source-map": "0.7.3", - "source-map-loader": "1.1.2", + "source-map-loader": "1.1.3", "source-map-support": "0.5.19", - "speed-measure-webpack-plugin": "1.3.3", + "speed-measure-webpack-plugin": "1.4.2", "style-loader": "2.0.0", "stylus": "0.54.8", - "stylus-loader": "4.1.1", - "terser": "5.3.7", + "stylus-loader": "4.3.3", + "terser": "5.5.1", "terser-webpack-plugin": "4.2.3", "text-table": "0.2.0", "tree-kill": "1.2.2", "webpack": "4.44.2", "webpack-dev-middleware": "3.7.2", - "webpack-dev-server": "3.11.0", - "webpack-merge": "5.2.0", - "webpack-sources": "2.0.1", - "webpack-subresource-integrity": "1.5.1", + "webpack-dev-server": "3.11.2", + "webpack-merge": "5.7.3", + "webpack-sources": "2.2.0", + "webpack-subresource-integrity": "1.5.2", "worker-plugin": "5.0.0" }, "dependencies": { - "@angular-devkit/core": { - "version": "11.0.3", - "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-11.0.3.tgz", - "integrity": "sha512-gJRiBj0gWDR2VtIvLvwwc/GM2MZvg1xw69ZbBJ1VuUgDqPBHdC8q3UMW3B82wdhxK+RBYa7ZOJxtIVggaHkm9g==", - "dev": true, - "requires": { - "ajv": "6.12.6", - "fast-json-stable-stringify": "2.1.0", - "magic-string": "0.25.7", - "rxjs": "6.6.3", - "source-map": "0.7.3" - } - }, - "ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", - "dev": true - }, - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", - "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "copy-webpack-plugin": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-6.2.1.tgz", - "integrity": "sha512-VH2ZTMIBsx4p++Lmpg77adZ0KUyM5gFR/9cuTrbneNnJlcQXUFvsNariPqq2dq2kV3F2skHiDGPQCyKWy1+U0Q==", - "dev": true, - "requires": { - "cacache": "^15.0.5", - "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.2", - "schema-utils": "^3.0.0", - "serialize-javascript": "^5.0.1", - "webpack-sources": "^1.4.3" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - }, - "webpack-sources": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.4.3.tgz", - "integrity": "sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==", - "dev": true, - "requires": { - "source-list-map": "^2.0.0", - "source-map": "~0.6.1" - } - } - } - }, "core-js": { - "version": "3.6.5", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.6.5.tgz", - "integrity": "sha512-vZVEEwZoIsI+vPEuoF9Iqf5H7/M3eeQqWlQnYa8FSKKePuYTf5MWnxb5SDAzCa60b3JBRS5g9b+Dq7b1y/RCrA==", + "version": "3.8.3", "dev": true }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "rxjs": { + "version": "6.6.3", + "dev": true, + "requires": { + "tslib": "^1.9.0" + } + }, + "tslib": { + "version": "1.14.1", "dev": true - }, - "ora": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/ora/-/ora-5.1.0.tgz", - "integrity": "sha512-9tXIMPvjZ7hPTbk8DFq1f7Kow/HU/pQYB60JbNq+QnGwcyhWVZaQ4hM9zQDEsPxw/muLpgiHSaumUZxCAmod/w==", - "dev": true, - "requires": { - "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" - } - }, - "p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dev": true, - "requires": { - "yocto-queue": "^0.1.0" - } - }, - "schema-utils": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.0.0.tgz", - "integrity": "sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA==", - "dev": true, - "requires": { - "@types/json-schema": "^7.0.6", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - } - }, - "serialize-javascript": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-5.0.1.tgz", - "integrity": "sha512-SaaNal9imEO737H2c05Og0/8LUXG7EnsZyMa8MzkmuHoELfT6txuj0cMqRj6zfPKnmQ1yasR4PCJc8x+M4JSPA==", - "dev": true, - "requires": { - "randombytes": "^2.1.0" - } - }, - "source-map": { - "version": "0.7.3", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", - "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", - "dev": true - }, - "strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.0" - } - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - }, - "webpack-sources": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-2.0.1.tgz", - "integrity": "sha512-A9oYz7ANQBK5EN19rUXbvNgfdfZf5U2gP0769OXsj9CvYkCR6OHOsd6OKyEy4H38GGxpsQPKIL83NC64QY6Xmw==", - "dev": true, - "requires": { - "source-list-map": "^2.0.1", - "source-map": "^0.6.1" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } - } } } }, "@angular-devkit/build-optimizer": { - "version": "0.1100.3", - "resolved": "https://registry.npmjs.org/@angular-devkit/build-optimizer/-/build-optimizer-0.1100.3.tgz", - "integrity": "sha512-ACvi4W8iDqWJOqHZA7LLI1lldbjrouANxOb1wxgFyr6krKypU6kDXOF2ZWNdrsgDvW0zwJPKeDNFzYyvqQpe/w==", + "version": "0.1102.14", "dev": true, "requires": { "loader-utils": "2.0.0", "source-map": "0.7.3", - "tslib": "2.0.3", - "typescript": "4.0.5", - "webpack-sources": "2.0.1" - }, - "dependencies": { - "source-map": { - "version": "0.7.3", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", - "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", - "dev": true - }, - "typescript": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.0.5.tgz", - "integrity": "sha512-ywmr/VrTVCmNTJ6iV2LwIrfG1P+lv6luD8sUJs+2eI9NLGigaN+nUQc13iHqisq7bra9lnmUSYqbJvegraBOPQ==", - "dev": true - }, - "webpack-sources": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-2.0.1.tgz", - "integrity": "sha512-A9oYz7ANQBK5EN19rUXbvNgfdfZf5U2gP0769OXsj9CvYkCR6OHOsd6OKyEy4H38GGxpsQPKIL83NC64QY6Xmw==", - "dev": true, - "requires": { - "source-list-map": "^2.0.1", - "source-map": "^0.6.1" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } - } - } + "tslib": "2.1.0", + "typescript": "4.1.5", + "webpack-sources": "2.2.0" } }, "@angular-devkit/build-webpack": { - "version": "0.1100.3", - "resolved": "https://registry.npmjs.org/@angular-devkit/build-webpack/-/build-webpack-0.1100.3.tgz", - "integrity": "sha512-X26Vplgu8x88AMSaMOdR28XIENAHYIAW98HloFOMIuqAubZYeoxaNIYleVO5haowU3YOLsD/FijmRKNXWUnYXg==", + "version": "0.1102.14", "dev": true, "requires": { - "@angular-devkit/architect": "0.1100.3", - "@angular-devkit/core": "11.0.3", + "@angular-devkit/architect": "0.1102.14", + "@angular-devkit/core": "11.2.14", "rxjs": "6.6.3" }, "dependencies": { - "@angular-devkit/core": { - "version": "11.0.3", - "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-11.0.3.tgz", - "integrity": "sha512-gJRiBj0gWDR2VtIvLvwwc/GM2MZvg1xw69ZbBJ1VuUgDqPBHdC8q3UMW3B82wdhxK+RBYa7ZOJxtIVggaHkm9g==", + "rxjs": { + "version": "6.6.3", "dev": true, "requires": { - "ajv": "6.12.6", - "fast-json-stable-stringify": "2.1.0", - "magic-string": "0.25.7", - "rxjs": "6.6.3", - "source-map": "0.7.3" + "tslib": "^1.9.0" } }, - "source-map": { - "version": "0.7.3", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", - "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", + "tslib": { + "version": "1.14.1", "dev": true } } }, "@angular-devkit/core": { - "version": "11.2.4", - "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-11.2.4.tgz", - "integrity": "sha512-98mGDV4XtKWiQ/2D6yzvOHrnJovXchaAN9AjscAHd2an8Fkiq72d9m2wREpk+2J40NWTDB6J5iesTh3qbi8+CA==", + "version": "11.2.14", "dev": true, "requires": { "ajv": "6.12.6", @@ -17241,36 +15711,50 @@ "source-map": "0.7.3" }, "dependencies": { - "source-map": { - "version": "0.7.3", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", - "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", + "rxjs": { + "version": "6.6.3", + "dev": true, + "requires": { + "tslib": "^1.9.0" + } + }, + "tslib": { + "version": "1.14.1", "dev": true } } }, "@angular-devkit/schematics": { - "version": "11.2.4", - "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-11.2.4.tgz", - "integrity": "sha512-M9Ike1TYawOIHzenlZS1ufQbsS+Z11/doj5w/UrU0q2OEKc6U375t5qVGgKo3PLHHS8osb9aW9xYwBfVlKrryQ==", + "version": "11.2.14", "dev": true, "requires": { - "@angular-devkit/core": "11.2.4", + "@angular-devkit/core": "11.2.14", "ora": "5.3.0", "rxjs": "6.6.3" + }, + "dependencies": { + "rxjs": { + "version": "6.6.3", + "dev": true, + "requires": { + "tslib": "^1.9.0" + } + }, + "tslib": { + "version": "1.14.1", + "dev": true + } } }, "@angular/cli": { - "version": "11.2.4", - "resolved": "https://registry.npmjs.org/@angular/cli/-/cli-11.2.4.tgz", - "integrity": "sha512-bbW93N3n/9GDk6OxQ5WzTWQcHXcj389Tg7gCov9MlRZg1ohqU/RtmQrMazzCCQjFUvJjEOT4a/lYbGYOYhMqag==", + "version": "11.2.14", "dev": true, "requires": { - "@angular-devkit/architect": "0.1102.4", - "@angular-devkit/core": "11.2.4", - "@angular-devkit/schematics": "11.2.4", - "@schematics/angular": "11.2.4", - "@schematics/update": "0.1102.4", + "@angular-devkit/architect": "0.1102.14", + "@angular-devkit/core": "11.2.14", + "@angular-devkit/schematics": "11.2.14", + "@schematics/angular": "11.2.14", + "@schematics/update": "0.1102.14", "@yarnpkg/lockfile": "1.1.0", "ansi-colors": "4.1.1", "debug": "4.3.1", @@ -17288,59 +15772,22 @@ "symbol-observable": "3.0.0", "universal-analytics": "0.4.23", "uuid": "8.3.2" - }, - "dependencies": { - "@angular-devkit/architect": { - "version": "0.1102.4", - "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1102.4.tgz", - "integrity": "sha512-A/nc/s9S9+H6xFOxcXqyfiCg9lXzCpO2ZVeaNamZB8f8tHoGfFMQ3JkCGhFiYsbze4fXhcwszNq1o36lGIW7FA==", - "dev": true, - "requires": { - "@angular-devkit/core": "11.2.4", - "rxjs": "6.6.3" - } - }, - "open": { - "version": "7.4.0", - "resolved": "https://registry.npmjs.org/open/-/open-7.4.0.tgz", - "integrity": "sha512-PGoBCX/lclIWlpS/R2PQuIR4NJoXh6X5AwVzE7WXnWRGvHg7+4TBCgsujUgiPpm0K1y4qvQeWnCWVTpTKZBtvA==", - "dev": true, - "requires": { - "is-docker": "^2.0.0", - "is-wsl": "^2.1.1" - } - }, - "semver": { - "version": "7.3.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.4.tgz", - "integrity": "sha512-tCfb2WLjqFAtXn4KEdxIhalnRtoKFN7nAwj0B3ZXCbQloV2tq5eDbcTmT68JJD3nRJq24/XgxtQKFIpQdtvmVw==", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } - } } }, "@angular/common": { - "version": "11.0.3", - "resolved": "https://registry.npmjs.org/@angular/common/-/common-11.0.3.tgz", - "integrity": "sha512-g5j6pwN6GOcqIDMV87/ZELm/VlWBvMj2vewIBr0a9KSA/pdAe6rvWR9kfnK9G6GFLv6ST3mq8HWe7NGyF1jpTw==", + "version": "11.2.14", "requires": { "tslib": "^2.0.0" } }, "@angular/compiler": { - "version": "11.0.3", - "resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-11.0.3.tgz", - "integrity": "sha512-OjfG4TzCzqNyHO4NmQNM7kdaWlbGrfXyB2i2Kd30PS9Z8s9cuhBBZS23P8NEEYNy1PjhI26cmiozrdMZl0hTUw==", + "version": "11.2.14", "requires": { "tslib": "^2.0.0" } }, "@angular/compiler-cli": { - "version": "11.0.3", - "resolved": "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-11.0.3.tgz", - "integrity": "sha512-i4AOShdsFcEecnu5Ulq5pRrtJBmF3F6KQTysSenzZ+Wdtne8Dk5Vx0kEIwtEFqdQwzzTshTJL5L0FCSE3mgOBw==", + "version": "11.2.14", "dev": true, "requires": { "@babel/core": "^7.8.6", @@ -17357,664 +15804,479 @@ "source-map": "^0.6.1", "sourcemap-codec": "^1.4.8", "tslib": "^2.0.0", - "yargs": "^16.1.1" + "yargs": "^16.2.0" }, "dependencies": { - "ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", - "dev": true - }, - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "cliui": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", - "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", - "dev": true, - "requires": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^7.0.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true - }, - "is-fullwidth-code-point": { - "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==", - "dev": true - }, "semver": { "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", "dev": true }, - "string-width": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", - "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", - "dev": true, - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.0" - } - }, - "strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.0" - } - }, - "wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dev": true, - "requires": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - } - }, - "y18n": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.5.tgz", - "integrity": "sha512-hsRUr4FFrvhhRH12wOdfs38Gy7k2FFzB9qgN9v3aLykRq0dRcdcpz5C9FxdS2NuhOrI/628b/KSTJ3rwHysYSg==", - "dev": true - }, - "yargs": { - "version": "16.1.1", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.1.1.tgz", - "integrity": "sha512-hAD1RcFP/wfgfxgMVswPE+z3tlPFtxG8/yWUrG2i17sTWGCGqWnxKcLTF4cUKDUK8fzokwsmO9H0TDkRbMHy8w==", - "dev": true, - "requires": { - "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" - } - }, - "yargs-parser": { - "version": "20.2.4", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz", - "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==", + "source-map": { + "version": "0.6.1", "dev": true } } }, "@angular/core": { - "version": "11.0.3", - "resolved": "https://registry.npmjs.org/@angular/core/-/core-11.0.3.tgz", - "integrity": "sha512-bxo5euE7+Q2ThowkVRwwvKyF5vQEyo9V14JM3GW8k2THbk7LfNctyNkTeuvkTBWfLF17Nd7b5+BdNttNKNlCuQ==", + "version": "11.2.14", "requires": { "tslib": "^2.0.0" } }, "@angular/forms": { - "version": "11.0.3", - "resolved": "https://registry.npmjs.org/@angular/forms/-/forms-11.0.3.tgz", - "integrity": "sha512-r0ntMYQq/P4mA2Cnryt6Zh2jJHgeKX/IN4ulCxKl59oxC1NskIfbIMk3UNHvCSFpsrzgKl6Btqyf+RYIc3kIxA==", + "version": "11.2.14", "requires": { "tslib": "^2.0.0" } }, "@angular/language-service": { - "version": "11.0.3", - "resolved": "https://registry.npmjs.org/@angular/language-service/-/language-service-11.0.3.tgz", - "integrity": "sha512-9tCPCiFwXco3QJhVIAFBjUGD3RS3SBOoaUsNAB0mGTGT6xOgayo37Z5UuOOHKHdlEpTlCFVLnSVm8DMZ4ehYpw==", + "version": "11.2.14", "dev": true }, "@angular/platform-browser": { - "version": "11.0.3", - "resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-11.0.3.tgz", - "integrity": "sha512-cwpYnVomsIEc9kckwqKCX9pRsd6iOtGMRJs0HOMtOC9v43osBpTSfZvYuARJNwJBO+Gb4AZvbIPuFe0XnZtYYA==", + "version": "11.2.14", "requires": { "tslib": "^2.0.0" } }, "@angular/platform-browser-dynamic": { - "version": "11.0.3", - "resolved": "https://registry.npmjs.org/@angular/platform-browser-dynamic/-/platform-browser-dynamic-11.0.3.tgz", - "integrity": "sha512-hqmlSxLhiG79Dp5He3zWn6OAHeAvjYurrQnJtLCr4ExVIi04rNWX+BjwUqCGyVMobe0T70JJAz+Bkl6vFiV3zw==", + "version": "11.2.14", "requires": { "tslib": "^2.0.0" } }, "@angular/router": { - "version": "11.0.3", - "resolved": "https://registry.npmjs.org/@angular/router/-/router-11.0.3.tgz", - "integrity": "sha512-iw9jed7sels2CcLJmr0m4TXfoiu8u40a84D0PsEEm1FGEXe4KJQ/jiLQTfiFQywxBd4cvlUdbl4lPHoUN0bspw==", + "version": "11.2.14", "requires": { "tslib": "^2.0.0" } }, "@babel/code-frame": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz", - "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==", + "version": "7.14.5", "dev": true, "requires": { - "@babel/highlight": "^7.10.4" + "@babel/highlight": "^7.14.5" } }, "@babel/compat-data": { - "version": "7.12.7", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.12.7.tgz", - "integrity": "sha512-YaxPMGs/XIWtYqrdEOZOCPsVWfEoriXopnsz3/i7apYPXQ3698UFhS6dVT1KN5qOsWmVgw/FOrmQgpRaZayGsw==", + "version": "7.14.7", "dev": true }, "@babel/core": { - "version": "7.12.3", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.12.3.tgz", - "integrity": "sha512-0qXcZYKZp3/6N2jKYVxZv0aNCsxTSVCiK72DTiTYZAu7sjg73W0/aynWjMbiGd87EQL4WyA8reiJVh92AVla9g==", + "version": "7.12.10", "dev": true, "requires": { "@babel/code-frame": "^7.10.4", - "@babel/generator": "^7.12.1", + "@babel/generator": "^7.12.10", "@babel/helper-module-transforms": "^7.12.1", - "@babel/helpers": "^7.12.1", - "@babel/parser": "^7.12.3", - "@babel/template": "^7.10.4", - "@babel/traverse": "^7.12.1", - "@babel/types": "^7.12.1", + "@babel/helpers": "^7.12.5", + "@babel/parser": "^7.12.10", + "@babel/template": "^7.12.7", + "@babel/traverse": "^7.12.10", + "@babel/types": "^7.12.10", "convert-source-map": "^1.7.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.1", "json5": "^2.1.2", "lodash": "^4.17.19", - "resolve": "^1.3.2", "semver": "^5.4.1", "source-map": "^0.5.0" }, "dependencies": { "semver": { "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", "dev": true }, "source-map": { "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", "dev": true } } }, "@babel/generator": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.12.1.tgz", - "integrity": "sha512-DB+6rafIdc9o72Yc3/Ph5h+6hUjeOp66pF0naQBgUFFuPqzQwIlPTm3xZR7YNvduIMtkDIj2t21LSQwnbCrXvg==", + "version": "7.12.11", "dev": true, "requires": { - "@babel/types": "^7.12.1", + "@babel/types": "^7.12.11", "jsesc": "^2.5.1", "source-map": "^0.5.0" }, "dependencies": { "source-map": { "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", "dev": true } } }, "@babel/helper-annotate-as-pure": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.10.4.tgz", - "integrity": "sha512-XQlqKQP4vXFB7BN8fEEerrmYvHp3fK/rBkRFz9jaJbzK0B1DSfej9Kc7ZzE8Z/OnId1jpJdNAZ3BFQjWG68rcA==", + "version": "7.14.5", "dev": true, "requires": { - "@babel/types": "^7.10.4" + "@babel/types": "^7.14.5" } }, "@babel/helper-builder-binary-assignment-operator-visitor": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.10.4.tgz", - "integrity": "sha512-L0zGlFrGWZK4PbT8AszSfLTM5sDU1+Az/En9VrdT8/LmEiJt4zXt+Jve9DCAnQcbqDhCI+29y/L93mrDzddCcg==", + "version": "7.14.5", "dev": true, "requires": { - "@babel/helper-explode-assignable-expression": "^7.10.4", - "@babel/types": "^7.10.4" + "@babel/helper-explode-assignable-expression": "^7.14.5", + "@babel/types": "^7.14.5" } }, "@babel/helper-compilation-targets": { - "version": "7.12.5", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.12.5.tgz", - "integrity": "sha512-+qH6NrscMolUlzOYngSBMIOQpKUGPPsc61Bu5W10mg84LxZ7cmvnBHzARKbDoFxVvqqAbj6Tg6N7bSrWSPXMyw==", + "version": "7.14.5", "dev": true, "requires": { - "@babel/compat-data": "^7.12.5", - "@babel/helper-validator-option": "^7.12.1", - "browserslist": "^4.14.5", - "semver": "^5.5.0" + "@babel/compat-data": "^7.14.5", + "@babel/helper-validator-option": "^7.14.5", + "browserslist": "^4.16.6", + "semver": "^6.3.0" }, "dependencies": { "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "version": "6.3.0", "dev": true } } }, "@babel/helper-create-class-features-plugin": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.12.1.tgz", - "integrity": "sha512-hkL++rWeta/OVOBTRJc9a5Azh5mt5WgZUGAKMD8JM141YsE08K//bp1unBBieO6rUKkIPyUE0USQ30jAy3Sk1w==", + "version": "7.14.6", "dev": true, "requires": { - "@babel/helper-function-name": "^7.10.4", - "@babel/helper-member-expression-to-functions": "^7.12.1", - "@babel/helper-optimise-call-expression": "^7.10.4", - "@babel/helper-replace-supers": "^7.12.1", - "@babel/helper-split-export-declaration": "^7.10.4" + "@babel/helper-annotate-as-pure": "^7.14.5", + "@babel/helper-function-name": "^7.14.5", + "@babel/helper-member-expression-to-functions": "^7.14.5", + "@babel/helper-optimise-call-expression": "^7.14.5", + "@babel/helper-replace-supers": "^7.14.5", + "@babel/helper-split-export-declaration": "^7.14.5" } }, "@babel/helper-create-regexp-features-plugin": { - "version": "7.12.7", - "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.12.7.tgz", - "integrity": "sha512-idnutvQPdpbduutvi3JVfEgcVIHooQnhvhx0Nk9isOINOIGYkZea1Pk2JlJRiUnMefrlvr0vkByATBY/mB4vjQ==", + "version": "7.14.5", "dev": true, "requires": { - "@babel/helper-annotate-as-pure": "^7.10.4", + "@babel/helper-annotate-as-pure": "^7.14.5", "regexpu-core": "^4.7.1" } }, - "@babel/helper-define-map": { - "version": "7.10.5", - "resolved": "https://registry.npmjs.org/@babel/helper-define-map/-/helper-define-map-7.10.5.tgz", - "integrity": "sha512-fMw4kgFB720aQFXSVaXr79pjjcW5puTCM16+rECJ/plGS+zByelE8l9nCpV1GibxTnFVmUuYG9U8wYfQHdzOEQ==", - "dev": true, - "requires": { - "@babel/helper-function-name": "^7.10.4", - "@babel/types": "^7.10.5", - "lodash": "^4.17.19" - } - }, "@babel/helper-explode-assignable-expression": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.12.1.tgz", - "integrity": "sha512-dmUwH8XmlrUpVqgtZ737tK88v07l840z9j3OEhCLwKTkjlvKpfqXVIZ0wpK3aeOxspwGrf/5AP5qLx4rO3w5rA==", + "version": "7.14.5", "dev": true, "requires": { - "@babel/types": "^7.12.1" + "@babel/types": "^7.14.5" } }, "@babel/helper-function-name": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.10.4.tgz", - "integrity": "sha512-YdaSyz1n8gY44EmN7x44zBn9zQ1Ry2Y+3GTA+3vH6Mizke1Vw0aWDM66FOYEPw8//qKkmqOckrGgTYa+6sceqQ==", + "version": "7.14.5", "dev": true, "requires": { - "@babel/helper-get-function-arity": "^7.10.4", - "@babel/template": "^7.10.4", - "@babel/types": "^7.10.4" + "@babel/helper-get-function-arity": "^7.14.5", + "@babel/template": "^7.14.5", + "@babel/types": "^7.14.5" + }, + "dependencies": { + "@babel/template": { + "version": "7.14.5", + "dev": true, + "requires": { + "@babel/code-frame": "^7.14.5", + "@babel/parser": "^7.14.5", + "@babel/types": "^7.14.5" + } + } } }, "@babel/helper-get-function-arity": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.4.tgz", - "integrity": "sha512-EkN3YDB+SRDgiIUnNgcmiD361ti+AVbL3f3Henf6dqqUyr5dMsorno0lJWJuLhDhkI5sYEpgj6y9kB8AOU1I2A==", + "version": "7.14.5", "dev": true, "requires": { - "@babel/types": "^7.10.4" + "@babel/types": "^7.14.5" } }, "@babel/helper-hoist-variables": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.10.4.tgz", - "integrity": "sha512-wljroF5PgCk2juF69kanHVs6vrLwIPNp6DLD+Lrl3hoQ3PpPPikaDRNFA+0t81NOoMt2DL6WW/mdU8k4k6ZzuA==", + "version": "7.14.5", "dev": true, "requires": { - "@babel/types": "^7.10.4" + "@babel/types": "^7.14.5" } }, "@babel/helper-member-expression-to-functions": { - "version": "7.12.7", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.12.7.tgz", - "integrity": "sha512-DCsuPyeWxeHgh1Dus7APn7iza42i/qXqiFPWyBDdOFtvS581JQePsc1F/nD+fHrcswhLlRc2UpYS1NwERxZhHw==", + "version": "7.14.7", "dev": true, "requires": { - "@babel/types": "^7.12.7" + "@babel/types": "^7.14.5" } }, "@babel/helper-module-imports": { - "version": "7.12.5", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.12.5.tgz", - "integrity": "sha512-SR713Ogqg6++uexFRORf/+nPXMmWIn80TALu0uaFb+iQIUoR7bOC7zBWyzBs5b3tBBJXuyD0cRu1F15GyzjOWA==", + "version": "7.14.5", "dev": true, "requires": { - "@babel/types": "^7.12.5" + "@babel/types": "^7.14.5" } }, "@babel/helper-module-transforms": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.12.1.tgz", - "integrity": "sha512-QQzehgFAZ2bbISiCpmVGfiGux8YVFXQ0abBic2Envhej22DVXV9nCFaS5hIQbkyo1AdGb+gNME2TSh3hYJVV/w==", + "version": "7.14.5", "dev": true, "requires": { - "@babel/helper-module-imports": "^7.12.1", - "@babel/helper-replace-supers": "^7.12.1", - "@babel/helper-simple-access": "^7.12.1", - "@babel/helper-split-export-declaration": "^7.11.0", - "@babel/helper-validator-identifier": "^7.10.4", - "@babel/template": "^7.10.4", - "@babel/traverse": "^7.12.1", - "@babel/types": "^7.12.1", - "lodash": "^4.17.19" + "@babel/helper-module-imports": "^7.14.5", + "@babel/helper-replace-supers": "^7.14.5", + "@babel/helper-simple-access": "^7.14.5", + "@babel/helper-split-export-declaration": "^7.14.5", + "@babel/helper-validator-identifier": "^7.14.5", + "@babel/template": "^7.14.5", + "@babel/traverse": "^7.14.5", + "@babel/types": "^7.14.5" + }, + "dependencies": { + "@babel/template": { + "version": "7.14.5", + "dev": true, + "requires": { + "@babel/code-frame": "^7.14.5", + "@babel/parser": "^7.14.5", + "@babel/types": "^7.14.5" + } + } } }, "@babel/helper-optimise-call-expression": { - "version": "7.12.7", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.12.7.tgz", - "integrity": "sha512-I5xc9oSJ2h59OwyUqjv95HRyzxj53DAubUERgQMrpcCEYQyToeHA+NEcUEsVWB4j53RDeskeBJ0SgRAYHDBckw==", + "version": "7.14.5", "dev": true, "requires": { - "@babel/types": "^7.12.7" + "@babel/types": "^7.14.5" } }, "@babel/helper-plugin-utils": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz", - "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg==", + "version": "7.14.5", "dev": true }, "@babel/helper-remap-async-to-generator": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.12.1.tgz", - "integrity": "sha512-9d0KQCRM8clMPcDwo8SevNs+/9a8yWVVmaE80FGJcEP8N1qToREmWEGnBn8BUlJhYRFz6fqxeRL1sl5Ogsed7A==", + "version": "7.14.5", "dev": true, "requires": { - "@babel/helper-annotate-as-pure": "^7.10.4", - "@babel/helper-wrap-function": "^7.10.4", - "@babel/types": "^7.12.1" + "@babel/helper-annotate-as-pure": "^7.14.5", + "@babel/helper-wrap-function": "^7.14.5", + "@babel/types": "^7.14.5" } }, "@babel/helper-replace-supers": { - "version": "7.12.5", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.12.5.tgz", - "integrity": "sha512-5YILoed0ZyIpF4gKcpZitEnXEJ9UoDRki1Ey6xz46rxOzfNMAhVIJMoune1hmPVxh40LRv1+oafz7UsWX+vyWA==", + "version": "7.14.5", "dev": true, "requires": { - "@babel/helper-member-expression-to-functions": "^7.12.1", - "@babel/helper-optimise-call-expression": "^7.10.4", - "@babel/traverse": "^7.12.5", - "@babel/types": "^7.12.5" + "@babel/helper-member-expression-to-functions": "^7.14.5", + "@babel/helper-optimise-call-expression": "^7.14.5", + "@babel/traverse": "^7.14.5", + "@babel/types": "^7.14.5" } }, "@babel/helper-simple-access": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.12.1.tgz", - "integrity": "sha512-OxBp7pMrjVewSSC8fXDFrHrBcJATOOFssZwv16F3/6Xtc138GHybBfPbm9kfiqQHKhYQrlamWILwlDCeyMFEaA==", + "version": "7.14.5", "dev": true, "requires": { - "@babel/types": "^7.12.1" + "@babel/types": "^7.14.5" } }, "@babel/helper-skip-transparent-expression-wrappers": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.12.1.tgz", - "integrity": "sha512-Mf5AUuhG1/OCChOJ/HcADmvcHM42WJockombn8ATJG3OnyiSxBK/Mm5x78BQWvmtXZKHgbjdGL2kin/HOLlZGA==", + "version": "7.14.5", "dev": true, "requires": { - "@babel/types": "^7.12.1" + "@babel/types": "^7.14.5" } }, "@babel/helper-split-export-declaration": { - "version": "7.11.0", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.11.0.tgz", - "integrity": "sha512-74Vejvp6mHkGE+m+k5vHY93FX2cAtrw1zXrZXRlG4l410Nm9PxfEiVTn1PjDPV5SnmieiueY4AFg2xqhNFuuZg==", + "version": "7.14.5", "dev": true, "requires": { - "@babel/types": "^7.11.0" + "@babel/types": "^7.14.5" } }, "@babel/helper-validator-identifier": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz", - "integrity": "sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw==", + "version": "7.14.5", "dev": true }, "@babel/helper-validator-option": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.12.1.tgz", - "integrity": "sha512-YpJabsXlJVWP0USHjnC/AQDTLlZERbON577YUVO/wLpqyj6HAtVYnWaQaN0iUN+1/tWn3c+uKKXjRut5115Y2A==", + "version": "7.14.5", "dev": true }, "@babel/helper-wrap-function": { - "version": "7.12.3", - "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.12.3.tgz", - "integrity": "sha512-Cvb8IuJDln3rs6tzjW3Y8UeelAOdnpB8xtQ4sme2MSZ9wOxrbThporC0y/EtE16VAtoyEfLM404Xr1e0OOp+ow==", + "version": "7.14.5", "dev": true, "requires": { - "@babel/helper-function-name": "^7.10.4", - "@babel/template": "^7.10.4", - "@babel/traverse": "^7.10.4", - "@babel/types": "^7.10.4" + "@babel/helper-function-name": "^7.14.5", + "@babel/template": "^7.14.5", + "@babel/traverse": "^7.14.5", + "@babel/types": "^7.14.5" + }, + "dependencies": { + "@babel/template": { + "version": "7.14.5", + "dev": true, + "requires": { + "@babel/code-frame": "^7.14.5", + "@babel/parser": "^7.14.5", + "@babel/types": "^7.14.5" + } + } } }, "@babel/helpers": { - "version": "7.12.5", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.12.5.tgz", - "integrity": "sha512-lgKGMQlKqA8meJqKsW6rUnc4MdUk35Ln0ATDqdM1a/UpARODdI4j5Y5lVfUScnSNkJcdCRAaWkspykNoFg9sJA==", + "version": "7.14.6", "dev": true, "requires": { - "@babel/template": "^7.10.4", - "@babel/traverse": "^7.12.5", - "@babel/types": "^7.12.5" + "@babel/template": "^7.14.5", + "@babel/traverse": "^7.14.5", + "@babel/types": "^7.14.5" + }, + "dependencies": { + "@babel/template": { + "version": "7.14.5", + "dev": true, + "requires": { + "@babel/code-frame": "^7.14.5", + "@babel/parser": "^7.14.5", + "@babel/types": "^7.14.5" + } + } } }, "@babel/highlight": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.4.tgz", - "integrity": "sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA==", + "version": "7.14.5", "dev": true, "requires": { - "@babel/helper-validator-identifier": "^7.10.4", + "@babel/helper-validator-identifier": "^7.14.5", "chalk": "^2.0.0", "js-tokens": "^4.0.0" } }, "@babel/parser": { - "version": "7.12.7", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.12.7.tgz", - "integrity": "sha512-oWR02Ubp4xTLCAqPRiNIuMVgNO5Aif/xpXtabhzW2HWUD47XJsAB4Zd/Rg30+XeQA3juXigV7hlquOTmwqLiwg==", + "version": "7.14.7", "dev": true }, "@babel/plugin-proposal-async-generator-functions": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.12.1.tgz", - "integrity": "sha512-d+/o30tJxFxrA1lhzJqiUcEJdI6jKlNregCv5bASeGf2Q4MXmnwH7viDo7nhx1/ohf09oaH8j1GVYG/e3Yqk6A==", + "version": "7.14.7", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/helper-remap-async-to-generator": "^7.12.1", - "@babel/plugin-syntax-async-generators": "^7.8.0" + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-remap-async-to-generator": "^7.14.5", + "@babel/plugin-syntax-async-generators": "^7.8.4" } }, "@babel/plugin-proposal-class-properties": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.12.1.tgz", - "integrity": "sha512-cKp3dlQsFsEs5CWKnN7BnSHOd0EOW8EKpEjkoz1pO2E5KzIDNV9Ros1b0CnmbVgAGXJubOYVBOGCT1OmJwOI7w==", + "version": "7.14.5", "dev": true, "requires": { - "@babel/helper-create-class-features-plugin": "^7.12.1", - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-create-class-features-plugin": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5" } }, "@babel/plugin-proposal-dynamic-import": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.12.1.tgz", - "integrity": "sha512-a4rhUSZFuq5W8/OO8H7BL5zspjnc1FLd9hlOxIK/f7qG4a0qsqk8uvF/ywgBA8/OmjsapjpvaEOYItfGG1qIvQ==", + "version": "7.14.5", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/plugin-syntax-dynamic-import": "^7.8.0" + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/plugin-syntax-dynamic-import": "^7.8.3" } }, "@babel/plugin-proposal-export-namespace-from": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.12.1.tgz", - "integrity": "sha512-6CThGf0irEkzujYS5LQcjBx8j/4aQGiVv7J9+2f7pGfxqyKh3WnmVJYW3hdrQjyksErMGBPQrCnHfOtna+WLbw==", + "version": "7.14.5", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.10.4", + "@babel/helper-plugin-utils": "^7.14.5", "@babel/plugin-syntax-export-namespace-from": "^7.8.3" } }, "@babel/plugin-proposal-json-strings": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.12.1.tgz", - "integrity": "sha512-GoLDUi6U9ZLzlSda2Df++VSqDJg3CG+dR0+iWsv6XRw1rEq+zwt4DirM9yrxW6XWaTpmai1cWJLMfM8qQJf+yw==", + "version": "7.14.5", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/plugin-syntax-json-strings": "^7.8.0" + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/plugin-syntax-json-strings": "^7.8.3" } }, "@babel/plugin-proposal-logical-assignment-operators": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.12.1.tgz", - "integrity": "sha512-k8ZmVv0JU+4gcUGeCDZOGd0lCIamU/sMtIiX3UWnUc5yzgq6YUGyEolNYD+MLYKfSzgECPcqetVcJP9Afe/aCA==", + "version": "7.14.5", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.10.4", + "@babel/helper-plugin-utils": "^7.14.5", "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" } }, "@babel/plugin-proposal-nullish-coalescing-operator": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.12.1.tgz", - "integrity": "sha512-nZY0ESiaQDI1y96+jk6VxMOaL4LPo/QDHBqL+SF3/vl6dHkTwHlOI8L4ZwuRBHgakRBw5zsVylel7QPbbGuYgg==", + "version": "7.14.5", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.0" + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" } }, "@babel/plugin-proposal-numeric-separator": { - "version": "7.12.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.12.7.tgz", - "integrity": "sha512-8c+uy0qmnRTeukiGsjLGy6uVs/TFjJchGXUeBqlG4VWYOdJWkhhVPdQ3uHwbmalfJwv2JsV0qffXP4asRfL2SQ==", + "version": "7.14.5", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.10.4", + "@babel/helper-plugin-utils": "^7.14.5", "@babel/plugin-syntax-numeric-separator": "^7.10.4" } }, "@babel/plugin-proposal-object-rest-spread": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.12.1.tgz", - "integrity": "sha512-s6SowJIjzlhx8o7lsFx5zmY4At6CTtDvgNQDdPzkBQucle58A6b/TTeEBYtyDgmcXjUTM+vE8YOGHZzzbc/ioA==", + "version": "7.14.7", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/plugin-syntax-object-rest-spread": "^7.8.0", - "@babel/plugin-transform-parameters": "^7.12.1" + "@babel/compat-data": "^7.14.7", + "@babel/helper-compilation-targets": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-transform-parameters": "^7.14.5" } }, "@babel/plugin-proposal-optional-catch-binding": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.12.1.tgz", - "integrity": "sha512-hFvIjgprh9mMw5v42sJWLI1lzU5L2sznP805zeT6rySVRA0Y18StRhDqhSxlap0oVgItRsB6WSROp4YnJTJz0g==", + "version": "7.14.5", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.0" + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" } }, "@babel/plugin-proposal-optional-chaining": { - "version": "7.12.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.12.7.tgz", - "integrity": "sha512-4ovylXZ0PWmwoOvhU2vhnzVNnm88/Sm9nx7V8BPgMvAzn5zDou3/Awy0EjglyubVHasJj+XCEkr/r1X3P5elCA==", + "version": "7.14.5", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/helper-skip-transparent-expression-wrappers": "^7.12.1", - "@babel/plugin-syntax-optional-chaining": "^7.8.0" + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.14.5", + "@babel/plugin-syntax-optional-chaining": "^7.8.3" } }, "@babel/plugin-proposal-private-methods": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.12.1.tgz", - "integrity": "sha512-mwZ1phvH7/NHK6Kf8LP7MYDogGV+DKB1mryFOEwx5EBNQrosvIczzZFTUmWaeujd5xT6G1ELYWUz3CutMhjE1w==", + "version": "7.14.5", "dev": true, "requires": { - "@babel/helper-create-class-features-plugin": "^7.12.1", - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-create-class-features-plugin": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5" } }, "@babel/plugin-proposal-unicode-property-regex": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.12.1.tgz", - "integrity": "sha512-MYq+l+PvHuw/rKUz1at/vb6nCnQ2gmJBNaM62z0OgH7B2W1D9pvkpYtlti9bGtizNIU1K3zm4bZF9F91efVY0w==", + "version": "7.14.5", "dev": true, "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.12.1", - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-create-regexp-features-plugin": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5" } }, "@babel/plugin-syntax-async-generators": { "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==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.8.0" } }, "@babel/plugin-syntax-class-properties": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.1.tgz", - "integrity": "sha512-U40A76x5gTwmESz+qiqssqmeEsKvcSyvtgktrm0uzcARAmM9I1jR221f6Oq+GmHrcD+LvZDag1UTOTe2fL3TeA==", + "version": "7.12.13", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-plugin-utils": "^7.12.13" } }, "@babel/plugin-syntax-dynamic-import": { "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==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.8.0" @@ -18022,8 +16284,6 @@ }, "@babel/plugin-syntax-export-namespace-from": { "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz", - "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.8.3" @@ -18031,8 +16291,6 @@ }, "@babel/plugin-syntax-json-strings": { "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==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.8.0" @@ -18040,8 +16298,6 @@ }, "@babel/plugin-syntax-logical-assignment-operators": { "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", - "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.10.4" @@ -18049,8 +16305,6 @@ }, "@babel/plugin-syntax-nullish-coalescing-operator": { "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==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.8.0" @@ -18058,8 +16312,6 @@ }, "@babel/plugin-syntax-numeric-separator": { "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==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.10.4" @@ -18067,8 +16319,6 @@ }, "@babel/plugin-syntax-object-rest-spread": { "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==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.8.0" @@ -18076,8 +16326,6 @@ }, "@babel/plugin-syntax-optional-catch-binding": { "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==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.8.0" @@ -18085,35 +16333,27 @@ }, "@babel/plugin-syntax-optional-chaining": { "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==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.8.0" } }, "@babel/plugin-syntax-top-level-await": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.12.1.tgz", - "integrity": "sha512-i7ooMZFS+a/Om0crxZodrTzNEPJHZrlMVGMTEpFAj6rYY/bKCddB0Dk/YxfPuYXOopuhKk/e1jV6h+WUU9XN3A==", + "version": "7.14.5", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-plugin-utils": "^7.14.5" } }, "@babel/plugin-transform-arrow-functions": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.12.1.tgz", - "integrity": "sha512-5QB50qyN44fzzz4/qxDPQMBCTHgxg3n0xRBLJUmBlLoU/sFvxVWGZF/ZUfMVDQuJUKXaBhbupxIzIfZ6Fwk/0A==", + "version": "7.14.5", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-plugin-utils": "^7.14.5" } }, "@babel/plugin-transform-async-to-generator": { "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.12.1.tgz", - "integrity": "sha512-SDtqoEcarK1DFlRJ1hHRY5HvJUj5kX4qmtpMAm2QnhOlyuMC4TMdCRgW6WXpv93rZeYNeLP22y8Aq2dbcDRM1A==", "dev": true, "requires": { "@babel/helper-module-imports": "^7.12.1", @@ -18122,329 +16362,261 @@ } }, "@babel/plugin-transform-block-scoped-functions": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.12.1.tgz", - "integrity": "sha512-5OpxfuYnSgPalRpo8EWGPzIYf0lHBWORCkj5M0oLBwHdlux9Ri36QqGW3/LR13RSVOAoUUMzoPI/jpE4ABcHoA==", + "version": "7.14.5", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-plugin-utils": "^7.14.5" } }, "@babel/plugin-transform-block-scoping": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.12.1.tgz", - "integrity": "sha512-zJyAC9sZdE60r1nVQHblcfCj29Dh2Y0DOvlMkcqSo0ckqjiCwNiUezUKw+RjOCwGfpLRwnAeQ2XlLpsnGkvv9w==", + "version": "7.14.5", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-plugin-utils": "^7.14.5" } }, "@babel/plugin-transform-classes": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.12.1.tgz", - "integrity": "sha512-/74xkA7bVdzQTBeSUhLLJgYIcxw/dpEpCdRDiHgPJ3Mv6uC11UhjpOhl72CgqbBCmt1qtssCyB2xnJm1+PFjog==", + "version": "7.14.5", "dev": true, "requires": { - "@babel/helper-annotate-as-pure": "^7.10.4", - "@babel/helper-define-map": "^7.10.4", - "@babel/helper-function-name": "^7.10.4", - "@babel/helper-optimise-call-expression": "^7.10.4", - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/helper-replace-supers": "^7.12.1", - "@babel/helper-split-export-declaration": "^7.10.4", + "@babel/helper-annotate-as-pure": "^7.14.5", + "@babel/helper-function-name": "^7.14.5", + "@babel/helper-optimise-call-expression": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-replace-supers": "^7.14.5", + "@babel/helper-split-export-declaration": "^7.14.5", "globals": "^11.1.0" } }, "@babel/plugin-transform-computed-properties": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.12.1.tgz", - "integrity": "sha512-vVUOYpPWB7BkgUWPo4C44mUQHpTZXakEqFjbv8rQMg7TC6S6ZhGZ3otQcRH6u7+adSlE5i0sp63eMC/XGffrzg==", + "version": "7.14.5", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-plugin-utils": "^7.14.5" } }, "@babel/plugin-transform-destructuring": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.12.1.tgz", - "integrity": "sha512-fRMYFKuzi/rSiYb2uRLiUENJOKq4Gnl+6qOv5f8z0TZXg3llUwUhsNNwrwaT/6dUhJTzNpBr+CUvEWBtfNY1cw==", + "version": "7.14.7", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-plugin-utils": "^7.14.5" } }, "@babel/plugin-transform-dotall-regex": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.12.1.tgz", - "integrity": "sha512-B2pXeRKoLszfEW7J4Hg9LoFaWEbr/kzo3teWHmtFCszjRNa/b40f9mfeqZsIDLLt/FjwQ6pz/Gdlwy85xNckBA==", + "version": "7.14.5", "dev": true, "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.12.1", - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-create-regexp-features-plugin": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5" } }, "@babel/plugin-transform-duplicate-keys": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.12.1.tgz", - "integrity": "sha512-iRght0T0HztAb/CazveUpUQrZY+aGKKaWXMJ4uf9YJtqxSUe09j3wteztCUDRHs+SRAL7yMuFqUsLoAKKzgXjw==", + "version": "7.14.5", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-plugin-utils": "^7.14.5" } }, "@babel/plugin-transform-exponentiation-operator": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.12.1.tgz", - "integrity": "sha512-7tqwy2bv48q+c1EHbXK0Zx3KXd2RVQp6OC7PbwFNt/dPTAV3Lu5sWtWuAj8owr5wqtWnqHfl2/mJlUmqkChKug==", + "version": "7.14.5", "dev": true, "requires": { - "@babel/helper-builder-binary-assignment-operator-visitor": "^7.10.4", - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-builder-binary-assignment-operator-visitor": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5" } }, "@babel/plugin-transform-for-of": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.12.1.tgz", - "integrity": "sha512-Zaeq10naAsuHo7heQvyV0ptj4dlZJwZgNAtBYBnu5nNKJoW62m0zKcIEyVECrUKErkUkg6ajMy4ZfnVZciSBhg==", + "version": "7.14.5", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-plugin-utils": "^7.14.5" } }, "@babel/plugin-transform-function-name": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.12.1.tgz", - "integrity": "sha512-JF3UgJUILoFrFMEnOJLJkRHSk6LUSXLmEFsA23aR2O5CSLUxbeUX1IZ1YQ7Sn0aXb601Ncwjx73a+FVqgcljVw==", + "version": "7.14.5", "dev": true, "requires": { - "@babel/helper-function-name": "^7.10.4", - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-function-name": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5" } }, "@babel/plugin-transform-literals": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.12.1.tgz", - "integrity": "sha512-+PxVGA+2Ag6uGgL0A5f+9rklOnnMccwEBzwYFL3EUaKuiyVnUipyXncFcfjSkbimLrODoqki1U9XxZzTvfN7IQ==", + "version": "7.14.5", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-plugin-utils": "^7.14.5" } }, "@babel/plugin-transform-member-expression-literals": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.12.1.tgz", - "integrity": "sha512-1sxePl6z9ad0gFMB9KqmYofk34flq62aqMt9NqliS/7hPEpURUCMbyHXrMPlo282iY7nAvUB1aQd5mg79UD9Jg==", + "version": "7.14.5", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-plugin-utils": "^7.14.5" } }, "@babel/plugin-transform-modules-amd": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.12.1.tgz", - "integrity": "sha512-tDW8hMkzad5oDtzsB70HIQQRBiTKrhfgwC/KkJeGsaNFTdWhKNt/BiE8c5yj19XiGyrxpbkOfH87qkNg1YGlOQ==", + "version": "7.14.5", "dev": true, "requires": { - "@babel/helper-module-transforms": "^7.12.1", - "@babel/helper-plugin-utils": "^7.10.4", + "@babel/helper-module-transforms": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5", "babel-plugin-dynamic-import-node": "^2.3.3" } }, "@babel/plugin-transform-modules-commonjs": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.12.1.tgz", - "integrity": "sha512-dY789wq6l0uLY8py9c1B48V8mVL5gZh/+PQ5ZPrylPYsnAvnEMjqsUXkuoDVPeVK+0VyGar+D08107LzDQ6pag==", + "version": "7.14.5", "dev": true, "requires": { - "@babel/helper-module-transforms": "^7.12.1", - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/helper-simple-access": "^7.12.1", + "@babel/helper-module-transforms": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-simple-access": "^7.14.5", "babel-plugin-dynamic-import-node": "^2.3.3" } }, "@babel/plugin-transform-modules-systemjs": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.12.1.tgz", - "integrity": "sha512-Hn7cVvOavVh8yvW6fLwveFqSnd7rbQN3zJvoPNyNaQSvgfKmDBO9U1YL9+PCXGRlZD9tNdWTy5ACKqMuzyn32Q==", + "version": "7.14.5", "dev": true, "requires": { - "@babel/helper-hoist-variables": "^7.10.4", - "@babel/helper-module-transforms": "^7.12.1", - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/helper-validator-identifier": "^7.10.4", + "@babel/helper-hoist-variables": "^7.14.5", + "@babel/helper-module-transforms": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-validator-identifier": "^7.14.5", "babel-plugin-dynamic-import-node": "^2.3.3" } }, "@babel/plugin-transform-modules-umd": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.12.1.tgz", - "integrity": "sha512-aEIubCS0KHKM0zUos5fIoQm+AZUMt1ZvMpqz0/H5qAQ7vWylr9+PLYurT+Ic7ID/bKLd4q8hDovaG3Zch2uz5Q==", + "version": "7.14.5", "dev": true, "requires": { - "@babel/helper-module-transforms": "^7.12.1", - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-module-transforms": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5" } }, "@babel/plugin-transform-named-capturing-groups-regex": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.12.1.tgz", - "integrity": "sha512-tB43uQ62RHcoDp9v2Nsf+dSM8sbNodbEicbQNA53zHz8pWUhsgHSJCGpt7daXxRydjb0KnfmB+ChXOv3oADp1Q==", + "version": "7.14.7", "dev": true, "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.12.1" + "@babel/helper-create-regexp-features-plugin": "^7.14.5" } }, "@babel/plugin-transform-new-target": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.12.1.tgz", - "integrity": "sha512-+eW/VLcUL5L9IvJH7rT1sT0CzkdUTvPrXC2PXTn/7z7tXLBuKvezYbGdxD5WMRoyvyaujOq2fWoKl869heKjhw==", + "version": "7.14.5", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-plugin-utils": "^7.14.5" } }, "@babel/plugin-transform-object-super": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.12.1.tgz", - "integrity": "sha512-AvypiGJH9hsquNUn+RXVcBdeE3KHPZexWRdimhuV59cSoOt5kFBmqlByorAeUlGG2CJWd0U+4ZtNKga/TB0cAw==", + "version": "7.14.5", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/helper-replace-supers": "^7.12.1" + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-replace-supers": "^7.14.5" } }, "@babel/plugin-transform-parameters": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.12.1.tgz", - "integrity": "sha512-xq9C5EQhdPK23ZeCdMxl8bbRnAgHFrw5EOC3KJUsSylZqdkCaFEXxGSBuTSObOpiiHHNyb82es8M1QYgfQGfNg==", + "version": "7.14.5", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-plugin-utils": "^7.14.5" } }, "@babel/plugin-transform-property-literals": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.12.1.tgz", - "integrity": "sha512-6MTCR/mZ1MQS+AwZLplX4cEySjCpnIF26ToWo942nqn8hXSm7McaHQNeGx/pt7suI1TWOWMfa/NgBhiqSnX0cQ==", + "version": "7.14.5", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-plugin-utils": "^7.14.5" } }, "@babel/plugin-transform-regenerator": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.12.1.tgz", - "integrity": "sha512-gYrHqs5itw6i4PflFX3OdBPMQdPbF4bj2REIUxlMRUFk0/ZOAIpDFuViuxPjUL7YC8UPnf+XG7/utJvqXdPKng==", + "version": "7.14.5", "dev": true, "requires": { "regenerator-transform": "^0.14.2" } }, "@babel/plugin-transform-reserved-words": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.12.1.tgz", - "integrity": "sha512-pOnUfhyPKvZpVyBHhSBoX8vfA09b7r00Pmm1sH+29ae2hMTKVmSp4Ztsr8KBKjLjx17H0eJqaRC3bR2iThM54A==", + "version": "7.14.5", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-plugin-utils": "^7.14.5" } }, "@babel/plugin-transform-runtime": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.12.1.tgz", - "integrity": "sha512-Ac/H6G9FEIkS2tXsZjL4RAdS3L3WHxci0usAnz7laPWUmFiGtj7tIASChqKZMHTSQTQY6xDbOq+V1/vIq3QrWg==", + "version": "7.12.10", "dev": true, "requires": { - "@babel/helper-module-imports": "^7.12.1", + "@babel/helper-module-imports": "^7.12.5", "@babel/helper-plugin-utils": "^7.10.4", - "resolve": "^1.8.1", "semver": "^5.5.1" }, "dependencies": { "semver": { "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", "dev": true } } }, "@babel/plugin-transform-shorthand-properties": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.12.1.tgz", - "integrity": "sha512-GFZS3c/MhX1OusqB1MZ1ct2xRzX5ppQh2JU1h2Pnfk88HtFTM+TWQqJNfwkmxtPQtb/s1tk87oENfXJlx7rSDw==", + "version": "7.14.5", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-plugin-utils": "^7.14.5" } }, "@babel/plugin-transform-spread": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.12.1.tgz", - "integrity": "sha512-vuLp8CP0BE18zVYjsEBZ5xoCecMK6LBMMxYzJnh01rxQRvhNhH1csMMmBfNo5tGpGO+NhdSNW2mzIvBu3K1fng==", + "version": "7.14.6", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/helper-skip-transparent-expression-wrappers": "^7.12.1" + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.14.5" } }, "@babel/plugin-transform-sticky-regex": { - "version": "7.12.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.12.7.tgz", - "integrity": "sha512-VEiqZL5N/QvDbdjfYQBhruN0HYjSPjC4XkeqW4ny/jNtH9gcbgaqBIXYEZCNnESMAGs0/K/R7oFGMhOyu/eIxg==", + "version": "7.14.5", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-plugin-utils": "^7.14.5" } }, "@babel/plugin-transform-template-literals": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.12.1.tgz", - "integrity": "sha512-b4Zx3KHi+taXB1dVRBhVJtEPi9h1THCeKmae2qP0YdUHIFhVjtpqqNfxeVAa1xeHVhAy4SbHxEwx5cltAu5apw==", + "version": "7.14.5", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-plugin-utils": "^7.14.5" } }, "@babel/plugin-transform-typeof-symbol": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.12.1.tgz", - "integrity": "sha512-EPGgpGy+O5Kg5pJFNDKuxt9RdmTgj5sgrus2XVeMp/ZIbOESadgILUbm50SNpghOh3/6yrbsH+NB5+WJTmsA7Q==", + "version": "7.14.5", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-plugin-utils": "^7.14.5" } }, "@babel/plugin-transform-unicode-escapes": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.12.1.tgz", - "integrity": "sha512-I8gNHJLIc7GdApm7wkVnStWssPNbSRMPtgHdmH3sRM1zopz09UWPS4x5V4n1yz/MIWTVnJ9sp6IkuXdWM4w+2Q==", + "version": "7.14.5", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-plugin-utils": "^7.14.5" } }, "@babel/plugin-transform-unicode-regex": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.12.1.tgz", - "integrity": "sha512-SqH4ClNngh/zGwHZOOQMTD+e8FGWexILV+ePMyiDJttAWRh5dhDL8rcl5lSgU3Huiq6Zn6pWTMvdPAb21Dwdyg==", + "version": "7.14.5", "dev": true, "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.12.1", - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-create-regexp-features-plugin": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5" } }, "@babel/preset-env": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.12.1.tgz", - "integrity": "sha512-H8kxXmtPaAGT7TyBvSSkoSTUK6RHh61So05SyEbpmr0MCZrsNYn7mGMzzeYoOUCdHzww61k8XBft2TaES+xPLg==", + "version": "7.12.11", "dev": true, "requires": { - "@babel/compat-data": "^7.12.1", - "@babel/helper-compilation-targets": "^7.12.1", - "@babel/helper-module-imports": "^7.12.1", + "@babel/compat-data": "^7.12.7", + "@babel/helper-compilation-targets": "^7.12.5", + "@babel/helper-module-imports": "^7.12.5", "@babel/helper-plugin-utils": "^7.10.4", - "@babel/helper-validator-option": "^7.12.1", + "@babel/helper-validator-option": "^7.12.11", "@babel/plugin-proposal-async-generator-functions": "^7.12.1", "@babel/plugin-proposal-class-properties": "^7.12.1", "@babel/plugin-proposal-dynamic-import": "^7.12.1", @@ -18452,10 +16624,10 @@ "@babel/plugin-proposal-json-strings": "^7.12.1", "@babel/plugin-proposal-logical-assignment-operators": "^7.12.1", "@babel/plugin-proposal-nullish-coalescing-operator": "^7.12.1", - "@babel/plugin-proposal-numeric-separator": "^7.12.1", + "@babel/plugin-proposal-numeric-separator": "^7.12.7", "@babel/plugin-proposal-object-rest-spread": "^7.12.1", "@babel/plugin-proposal-optional-catch-binding": "^7.12.1", - "@babel/plugin-proposal-optional-chaining": "^7.12.1", + "@babel/plugin-proposal-optional-chaining": "^7.12.7", "@babel/plugin-proposal-private-methods": "^7.12.1", "@babel/plugin-proposal-unicode-property-regex": "^7.12.1", "@babel/plugin-syntax-async-generators": "^7.8.0", @@ -18473,7 +16645,7 @@ "@babel/plugin-transform-arrow-functions": "^7.12.1", "@babel/plugin-transform-async-to-generator": "^7.12.1", "@babel/plugin-transform-block-scoped-functions": "^7.12.1", - "@babel/plugin-transform-block-scoping": "^7.12.1", + "@babel/plugin-transform-block-scoping": "^7.12.11", "@babel/plugin-transform-classes": "^7.12.1", "@babel/plugin-transform-computed-properties": "^7.12.1", "@babel/plugin-transform-destructuring": "^7.12.1", @@ -18497,29 +16669,25 @@ "@babel/plugin-transform-reserved-words": "^7.12.1", "@babel/plugin-transform-shorthand-properties": "^7.12.1", "@babel/plugin-transform-spread": "^7.12.1", - "@babel/plugin-transform-sticky-regex": "^7.12.1", + "@babel/plugin-transform-sticky-regex": "^7.12.7", "@babel/plugin-transform-template-literals": "^7.12.1", - "@babel/plugin-transform-typeof-symbol": "^7.12.1", + "@babel/plugin-transform-typeof-symbol": "^7.12.10", "@babel/plugin-transform-unicode-escapes": "^7.12.1", "@babel/plugin-transform-unicode-regex": "^7.12.1", "@babel/preset-modules": "^0.1.3", - "@babel/types": "^7.12.1", - "core-js-compat": "^3.6.2", + "@babel/types": "^7.12.11", + "core-js-compat": "^3.8.0", "semver": "^5.5.0" }, "dependencies": { "semver": { "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", "dev": true } } }, "@babel/preset-modules": { "version": "0.1.4", - "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.4.tgz", - "integrity": "sha512-J36NhwnfdzpmH41M1DrnkkgAqhZaqr/NBdPfQ677mLzlaXo+oDiv1deyCDtgAhz8p328otdob0Du7+xgHGZbKg==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.0.0", @@ -18530,122 +16698,90 @@ } }, "@babel/runtime": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.12.1.tgz", - "integrity": "sha512-J5AIf3vPj3UwXaAzb5j1xM4WAQDX3EMgemF8rjCP3SoW09LfRKAXQKt6CoVYl230P6iWdRcBbnLDDdnqWxZSCA==", + "version": "7.12.5", "dev": true, "requires": { "regenerator-runtime": "^0.13.4" } }, "@babel/template": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.10.4.tgz", - "integrity": "sha512-ZCjD27cGJFUB6nmCB1Enki3r+L5kJveX9pq1SvAUKoICy6CZ9yD8xO086YXdYhvNjBdnekm4ZnaP5yC8Cs/1tA==", + "version": "7.12.7", "dev": true, "requires": { "@babel/code-frame": "^7.10.4", - "@babel/parser": "^7.10.4", - "@babel/types": "^7.10.4" + "@babel/parser": "^7.12.7", + "@babel/types": "^7.12.7" } }, "@babel/traverse": { - "version": "7.12.9", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.12.9.tgz", - "integrity": "sha512-iX9ajqnLdoU1s1nHt36JDI9KG4k+vmI8WgjK5d+aDTwQbL2fUnzedNedssA645Ede3PM2ma1n8Q4h2ohwXgMXw==", + "version": "7.14.7", "dev": true, "requires": { - "@babel/code-frame": "^7.10.4", - "@babel/generator": "^7.12.5", - "@babel/helper-function-name": "^7.10.4", - "@babel/helper-split-export-declaration": "^7.11.0", - "@babel/parser": "^7.12.7", - "@babel/types": "^7.12.7", + "@babel/code-frame": "^7.14.5", + "@babel/generator": "^7.14.5", + "@babel/helper-function-name": "^7.14.5", + "@babel/helper-hoist-variables": "^7.14.5", + "@babel/helper-split-export-declaration": "^7.14.5", + "@babel/parser": "^7.14.7", + "@babel/types": "^7.14.5", "debug": "^4.1.0", - "globals": "^11.1.0", - "lodash": "^4.17.19" + "globals": "^11.1.0" }, "dependencies": { "@babel/generator": { - "version": "7.12.5", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.12.5.tgz", - "integrity": "sha512-m16TQQJ8hPt7E+OS/XVQg/7U184MLXtvuGbCdA7na61vha+ImkyyNM/9DDA0unYCVZn3ZOhng+qz48/KBOT96A==", + "version": "7.14.5", "dev": true, "requires": { - "@babel/types": "^7.12.5", + "@babel/types": "^7.14.5", "jsesc": "^2.5.1", "source-map": "^0.5.0" } }, "source-map": { "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", "dev": true } } }, "@babel/types": { - "version": "7.12.7", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.12.7.tgz", - "integrity": "sha512-MNyI92qZq6jrQkXvtIiykvl4WtoRrVV9MPn+ZfsoEENjiWcBQ3ZSHrkxnJWgWtLX3XXqX5hrSQ+X69wkmesXuQ==", + "version": "7.14.5", "dev": true, "requires": { - "@babel/helper-validator-identifier": "^7.10.4", - "lodash": "^4.17.19", + "@babel/helper-validator-identifier": "^7.14.5", "to-fast-properties": "^2.0.0" } }, + "@discoveryjs/json-ext": { + "version": "0.5.2", + "dev": true + }, "@ionic/angular": { - "version": "5.5.1", - "resolved": "https://registry.npmjs.org/@ionic/angular/-/angular-5.5.1.tgz", - "integrity": "sha512-54aGiuZSnKcxN3gdsQN4LMdW96X/0crdnIUlAJt4DhdsrwjzHNEjCaXUTstAcpB1Rxbz5/uWbzpDcd174izkxQ==", + "version": "5.6.11", "requires": { - "@ionic/core": "5.5.1", + "@ionic/core": "5.6.11", "tslib": "^1.9.3" }, "dependencies": { "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + "version": "1.14.1" } } }, "@ionic/angular-toolkit": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@ionic/angular-toolkit/-/angular-toolkit-3.0.0.tgz", - "integrity": "sha512-H6SX8k+uPTdcsZAHEOaH5oIuQWSeIqEqEjjPqiD0e5+wmqc94RANNC/cRX/3cnVsWQiqcUY75CbpGec4xRvWoA==", + "version": "3.1.1", "dev": true, "requires": { - "@schematics/angular": "^11.0.0", + "@schematics/angular": "^11.2.4", "cheerio": "1.0.0-rc.3", "colorette": "1.1.0", "copy-webpack-plugin": "^6.2.1", "tapable": "^2.1.1", "tslib": "^2.0.3", "ws": "^7.0.1" - }, - "dependencies": { - "colorette": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.1.0.tgz", - "integrity": "sha512-6S062WDQUXi6hOfkO/sBPVwE5ASXY4G2+b4atvhJfSsuUUhIaUKlkjLe9692Ipyt5/a+IPF5aVTu3V5gvXq5cg==", - "dev": true - }, - "ws": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.1.tgz", - "integrity": "sha512-pTsP8UAfhy3sk1lSk/O/s4tjD0CRwvMnzvwr4OKGX7ZvqZtUyx4KIJB5JWbkykPoc55tixMGgTNoh3k4FkNGFQ==", - "dev": true, - "requires": {} - } } }, "@ionic/cli-framework": { - "version": "5.0.6", - "resolved": "https://registry.npmjs.org/@ionic/cli-framework/-/cli-framework-5.0.6.tgz", - "integrity": "sha512-CygkCCn+O3vMmt+l5y+evmcBHBI/HVr+QWQVca84ooM2lrLzIQDRC+iZ5RKOnF+eCcywGZ6a68FvXoWAvQzfmw==", + "version": "5.1.0", "dev": true, "requires": { "@ionic/cli-framework-output": "2.2.2", @@ -18667,17 +16803,13 @@ "dependencies": { "ansi-styles": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "requires": { "color-convert": "^2.0.1" } }, "chalk": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", - "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", + "version": "4.1.1", "dev": true, "requires": { "ansi-styles": "^4.1.0", @@ -18686,8 +16818,6 @@ }, "color-convert": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, "requires": { "color-name": "~1.1.4" @@ -18695,20 +16825,14 @@ }, "color-name": { "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, "has-flag": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true }, "supports-color": { "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "requires": { "has-flag": "^4.0.0" @@ -18718,8 +16842,6 @@ }, "@ionic/cli-framework-output": { "version": "2.2.2", - "resolved": "https://registry.npmjs.org/@ionic/cli-framework-output/-/cli-framework-output-2.2.2.tgz", - "integrity": "sha512-eQYkqIW1/tCwSC6Bd0gjse96U11lDX/ikf3jvsjX7a8z/zwSmGzCHRizb7xogV65Ey+1/zyAZR71cpDRQuFLBQ==", "dev": true, "requires": { "@ionic/utils-terminal": "2.3.1", @@ -18728,28 +16850,18 @@ } }, "@ionic/core": { - "version": "5.5.1", - "resolved": "https://registry.npmjs.org/@ionic/core/-/core-5.5.1.tgz", - "integrity": "sha512-ytsweRqFeupuVzMJydjh0w0RMjlI+GkHwXQ5SwVuto+cRxA9aKPkcxELzOWYRto3E00jbXFBThGhoL+jNUsK7g==", + "version": "5.6.11", "requires": { - "ionicons": "^5.1.2", - "tslib": "^1.10.0" - }, - "dependencies": { - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" - } + "@stencil/core": "^2.4.0", + "ionicons": "^5.5.1", + "tslib": "^2.1.0" } }, "@ionic/lab": { - "version": "3.2.9", - "resolved": "https://registry.npmjs.org/@ionic/lab/-/lab-3.2.9.tgz", - "integrity": "sha512-+0fzd3SZ+4dZOaVHNAbhN/2R5pDqJnQLitVgkAFp4gMpyjkIW3enBMpXBLnOaqGhUABUF1Qve7qT+ySQBP8yTA==", + "version": "3.2.10", "dev": true, "requires": { - "@ionic/cli-framework": "5.0.6", + "@ionic/cli-framework": "5.1.0", "@ionic/utils-fs": "3.1.5", "chalk": "^4.0.0", "express": "^4.16.2", @@ -18758,17 +16870,13 @@ "dependencies": { "ansi-styles": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "requires": { "color-convert": "^2.0.1" } }, "chalk": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", - "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", + "version": "4.1.1", "dev": true, "requires": { "ansi-styles": "^4.1.0", @@ -18777,8 +16885,6 @@ }, "color-convert": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, "requires": { "color-name": "~1.1.4" @@ -18786,20 +16892,14 @@ }, "color-name": { "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, "has-flag": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true }, "supports-color": { "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "requires": { "has-flag": "^4.0.0" @@ -18808,26 +16908,25 @@ } }, "@ionic/storage": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@ionic/storage/-/storage-2.2.0.tgz", - "integrity": "sha512-2pszrzmI+fAar2Rx0WmJDVpc15D1k5tvLkB49NLYWJ2pOMaO/3/vp7mg/mEbg3rdsPE9FRbYI6vdKjQ2pP1EWA==", + "version": "3.0.6", "requires": { - "localforage": "1.7.1", - "localforage-cordovasqlitedriver": "1.7.0", - "tslib": "^1.7.1" + "localforage": "^1.9.0" + } + }, + "@ionic/storage-angular": { + "version": "3.0.6", + "requires": { + "@ionic/storage": "^3.0.4", + "tslib": "^1.10.0" }, "dependencies": { "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + "version": "1.14.1" } } }, "@ionic/utils-array": { "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@ionic/utils-array/-/utils-array-2.1.5.tgz", - "integrity": "sha512-HD72a71IQVBmQckDwmA8RxNVMTbxnaLbgFOl+dO5tbvW9CkkSFCv41h6fUuNsSEVgngfkn0i98HDuZC8mk+lTA==", "dev": true, "requires": { "debug": "^4.0.0", @@ -18836,8 +16935,6 @@ }, "@ionic/utils-fs": { "version": "3.1.5", - "resolved": "https://registry.npmjs.org/@ionic/utils-fs/-/utils-fs-3.1.5.tgz", - "integrity": "sha512-a41bY2dHqWSEQQ/80CpbXSs8McyiCFf2DnIWWLukrhYWf46h4qi6M/8dxcMKrofRiqI/3F+cL3S2mOm9Zz/o2Q==", "dev": true, "requires": { "debug": "^4.0.0", @@ -18846,47 +16943,31 @@ }, "dependencies": { "fs-extra": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.0.1.tgz", - "integrity": "sha512-h2iAoN838FqAFJY2/qVpzFXy+EBxfVE220PalAqQLDVsFOHLJrZvut5puAbCdNv6WJk+B8ihI+k0c7JK5erwqQ==", + "version": "9.1.0", "dev": true, "requires": { "at-least-node": "^1.0.0", "graceful-fs": "^4.2.0", "jsonfile": "^6.0.1", - "universalify": "^1.0.0" + "universalify": "^2.0.0" } }, "jsonfile": { "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", "dev": true, "requires": { "graceful-fs": "^4.1.6", "universalify": "^2.0.0" - }, - "dependencies": { - "universalify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", - "dev": true - } } }, "universalify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-1.0.0.tgz", - "integrity": "sha512-rb6X1W158d7pRQBg5gkR8uPaSfiids68LTJQYOtEUhoJUWBdaQHsuT/EUduxXYxcrt4r5PJ4fuHW1MHT6p0qug==", + "version": "2.0.0", "dev": true } } }, "@ionic/utils-object": { "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@ionic/utils-object/-/utils-object-2.1.5.tgz", - "integrity": "sha512-XnYNSwfewUqxq+yjER1hxTKggftpNjFLJH0s37jcrNDwbzmbpFTQTVAp4ikNK4rd9DOebX/jbeZb8jfD86IYxw==", "dev": true, "requires": { "debug": "^4.0.0", @@ -18895,8 +16976,6 @@ }, "@ionic/utils-process": { "version": "2.1.8", - "resolved": "https://registry.npmjs.org/@ionic/utils-process/-/utils-process-2.1.8.tgz", - "integrity": "sha512-VBBoyTzi+m6tgKAItl+jiTQneGwTOsctcrTG4CsEgmVOVOEhUYkPhddXqzD+oC54hPDU9ROsd3I014P5CWEuhQ==", "dev": true, "requires": { "@ionic/utils-object": "2.1.5", @@ -18909,8 +16988,6 @@ }, "@ionic/utils-stream": { "version": "3.1.5", - "resolved": "https://registry.npmjs.org/@ionic/utils-stream/-/utils-stream-3.1.5.tgz", - "integrity": "sha512-hkm46uHvEC05X/8PHgdJi4l4zv9VQDELZTM+Kz69odtO9zZYfnt8DkfXHJqJ+PxmtiE5mk/ehJWLnn/XAczTUw==", "dev": true, "requires": { "debug": "^4.0.0", @@ -18919,8 +16996,6 @@ }, "@ionic/utils-subprocess": { "version": "2.1.8", - "resolved": "https://registry.npmjs.org/@ionic/utils-subprocess/-/utils-subprocess-2.1.8.tgz", - "integrity": "sha512-pkmtf1LtXcEMPn6/cctREL2aZtZoy0+0Sl+nT0NIkOHIoBUcqrcfMWdctCSM4Mp6+2/hLWtgpHE3TOIibkWfIg==", "dev": true, "requires": { "@ionic/utils-array": "2.1.5", @@ -18931,55 +17006,10 @@ "cross-spawn": "^7.0.0", "debug": "^4.0.0", "tslib": "^2.0.1" - }, - "dependencies": { - "cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "dev": true, - "requires": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - } - }, - "path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true - }, - "shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, - "requires": { - "shebang-regex": "^3.0.0" - } - }, - "shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true - }, - "which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } - } } }, "@ionic/utils-terminal": { "version": "2.3.1", - "resolved": "https://registry.npmjs.org/@ionic/utils-terminal/-/utils-terminal-2.3.1.tgz", - "integrity": "sha512-cglsSd2AckI3Ldtdfczeq64vIIDjtPspV5QJtky8f8uIdxkeOIGeRV7bCj1+BEf1hyo+ZuggQxLviHnbMZhiRw==", "dev": true, "requires": { "debug": "^4.0.0", @@ -18990,93 +17020,14 @@ "tslib": "^2.0.1", "untildify": "^4.0.0", "wrap-ansi": "^7.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", - "dev": true - }, - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true - }, - "is-fullwidth-code-point": { - "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==", - "dev": true - }, - "string-width": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", - "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", - "dev": true, - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.0" - } - }, - "strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.0" - } - }, - "wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dev": true, - "requires": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - } - } } }, "@istanbuljs/schema": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.2.tgz", - "integrity": "sha512-tsAQNx32a8CoFhjhijUIhI4kccIAgmGhy8LZMZgGfmXcpMbPRUqn5LWmgRttILi6yeGmBJd2xsPkFMs0PzgPCw==", + "version": "0.1.3", "dev": true }, "@jsdevtools/coverage-istanbul-loader": { "version": "3.0.5", - "resolved": "https://registry.npmjs.org/@jsdevtools/coverage-istanbul-loader/-/coverage-istanbul-loader-3.0.5.tgz", - "integrity": "sha512-EUCPEkaRPvmHjWAAZkWMT7JDzpw7FKB00WTISaiXsbNOd5hCHg77XLA8sLYLFDo1zepYLo2w7GstN8YBqRXZfA==", "dev": true, "requires": { "convert-source-map": "^1.7.0", @@ -19086,142 +17037,114 @@ "schema-utils": "^2.7.0" } }, + "@ngrx/component": { + "version": "11.1.1", + "resolved": "https://registry.npmjs.org/@ngrx/component/-/component-11.1.1.tgz", + "integrity": "sha512-Vw2jyz5O8g61OcDtX8FcJh+EV9VDJsk/q61WQyOuwr0yi3SbRnn/77bHzF27RVwiQn8lq3yteNnh32H/vRdFWQ==", + "requires": { + "tslib": "^2.0.0" + } + }, "@ngtools/webpack": { - "version": "11.0.3", - "resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-11.0.3.tgz", - "integrity": "sha512-TbWharROiFA88HOLvchtSwJfnFJEgn8HcdXRDX7EL2efDYC8UVZfXms58MCEQUk66ZjikNeIHPQml5rStSqPKQ==", + "version": "11.2.14", "dev": true, "requires": { - "@angular-devkit/core": "11.0.3", - "enhanced-resolve": "5.3.1", - "webpack-sources": "2.0.1" - }, - "dependencies": { - "@angular-devkit/core": { - "version": "11.0.3", - "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-11.0.3.tgz", - "integrity": "sha512-gJRiBj0gWDR2VtIvLvwwc/GM2MZvg1xw69ZbBJ1VuUgDqPBHdC8q3UMW3B82wdhxK+RBYa7ZOJxtIVggaHkm9g==", - "dev": true, - "requires": { - "ajv": "6.12.6", - "fast-json-stable-stringify": "2.1.0", - "magic-string": "0.25.7", - "rxjs": "6.6.3", - "source-map": "0.7.3" - } - }, - "source-map": { - "version": "0.7.3", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", - "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", - "dev": true - }, - "webpack-sources": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-2.0.1.tgz", - "integrity": "sha512-A9oYz7ANQBK5EN19rUXbvNgfdfZf5U2gP0769OXsj9CvYkCR6OHOsd6OKyEy4H38GGxpsQPKIL83NC64QY6Xmw==", - "dev": true, - "requires": { - "source-list-map": "^2.0.1", - "source-map": "^0.6.1" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } - } - } + "@angular-devkit/core": "11.2.14", + "enhanced-resolve": "5.7.0", + "webpack-sources": "2.2.0" } }, "@nodelib/fs.scandir": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.3.tgz", - "integrity": "sha512-eGmwYQn3gxo4r7jdQnkrrN6bY478C3P+a/y72IJukF8LjB6ZHeB3c+Ehacj3sYeSmUXGlnA67/PmbM9CVwL7Dw==", + "version": "2.1.5", "dev": true, "requires": { - "@nodelib/fs.stat": "2.0.3", + "@nodelib/fs.stat": "2.0.5", "run-parallel": "^1.1.9" } }, "@nodelib/fs.stat": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.3.tgz", - "integrity": "sha512-bQBFruR2TAwoevBEd/NWMoAAtNGzTRgdrqnYCc7dhzfoNvqPzLyqlEQnzZ3kVnNrSp25iyxE00/3h2fqGAGArA==", + "version": "2.0.5", "dev": true }, "@nodelib/fs.walk": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.4.tgz", - "integrity": "sha512-1V9XOY4rDW0rehzbrcqAmHnz8e7SKvX27gh8Gt2WgB0+pdzdiLV83p72kZPU+jvMbS1qU5mauP2iOvO8rhmurQ==", + "version": "1.2.8", "dev": true, "requires": { - "@nodelib/fs.scandir": "2.1.3", + "@nodelib/fs.scandir": "2.1.5", "fastq": "^1.6.0" } }, "@npmcli/ci-detect": { "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@npmcli/ci-detect/-/ci-detect-1.3.0.tgz", - "integrity": "sha512-oN3y7FAROHhrAt7Rr7PnTSwrHrZVRTS2ZbyxeQwSSYD0ifwM3YNgQqbaRmjcWoPyq77MjchusjJDspbzMmip1Q==", "dev": true }, "@npmcli/git": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/@npmcli/git/-/git-2.0.6.tgz", - "integrity": "sha512-a1MnTfeRPBaKbFY07fd+6HugY1WAkKJzdiJvlRub/9o5xz2F/JtPacZZapx5zRJUQFIzSL677vmTSxEcDMrDbg==", + "version": "2.1.0", "dev": true, "requires": { - "@npmcli/promise-spawn": "^1.1.0", + "@npmcli/promise-spawn": "^1.3.2", "lru-cache": "^6.0.0", - "mkdirp": "^1.0.3", - "npm-pick-manifest": "^6.0.0", + "mkdirp": "^1.0.4", + "npm-pick-manifest": "^6.1.1", "promise-inflight": "^1.0.1", "promise-retry": "^2.0.1", - "semver": "^7.3.2", - "unique-filename": "^1.1.1", + "semver": "^7.3.5", "which": "^2.0.2" }, "dependencies": { "err-code": { "version": "2.0.3", - "resolved": "https://registry.npmjs.org/err-code/-/err-code-2.0.3.tgz", - "integrity": "sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==", "dev": true }, - "mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "dev": true + "hosted-git-info": { + "version": "4.0.2", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + }, + "npm-package-arg": { + "version": "8.1.5", + "dev": true, + "requires": { + "hosted-git-info": "^4.0.1", + "semver": "^7.3.4", + "validate-npm-package-name": "^3.0.0" + } + }, + "npm-pick-manifest": { + "version": "6.1.1", + "dev": true, + "requires": { + "npm-install-checks": "^4.0.0", + "npm-normalize-package-bin": "^1.0.1", + "npm-package-arg": "^8.1.2", + "semver": "^7.3.4" + } }, "promise-retry": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/promise-retry/-/promise-retry-2.0.1.tgz", - "integrity": "sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==", "dev": true, "requires": { "err-code": "^2.0.2", "retry": "^0.12.0" } }, - "which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "retry": { + "version": "0.12.0", + "dev": true + }, + "semver": { + "version": "7.3.5", "dev": true, "requires": { - "isexe": "^2.0.0" + "lru-cache": "^6.0.0" } } } }, "@npmcli/installed-package-contents": { "version": "1.0.7", - "resolved": "https://registry.npmjs.org/@npmcli/installed-package-contents/-/installed-package-contents-1.0.7.tgz", - "integrity": "sha512-9rufe0wnJusCQoLpV9ZPKIVP55itrM5BxOXs10DmdbRfgWtHy1LDyskbwRnBghuB0PrF7pNPOqREVtpz4HqzKw==", "dev": true, "requires": { "npm-bundled": "^1.1.1", @@ -19229,41 +17152,26 @@ } }, "@npmcli/move-file": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@npmcli/move-file/-/move-file-1.0.1.tgz", - "integrity": "sha512-Uv6h1sT+0DrblvIrolFtbvM1FgWm+/sy4B3pvLp67Zys+thcukzS5ekn7HsZFGpWP4Q3fYJCljbWQE/XivMRLw==", + "version": "1.1.2", "dev": true, "requires": { - "mkdirp": "^1.0.4" - }, - "dependencies": { - "mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "dev": true - } + "mkdirp": "^1.0.4", + "rimraf": "^3.0.2" } }, "@npmcli/node-gyp": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@npmcli/node-gyp/-/node-gyp-1.0.2.tgz", - "integrity": "sha512-yrJUe6reVMpktcvagumoqD9r08fH1iRo01gn1u0zoCApa9lnZGEigVKUd2hzsCId4gdtkZZIVscLhNxMECKgRg==", "dev": true }, "@npmcli/promise-spawn": { "version": "1.3.2", - "resolved": "https://registry.npmjs.org/@npmcli/promise-spawn/-/promise-spawn-1.3.2.tgz", - "integrity": "sha512-QyAGYo/Fbj4MXeGdJcFzZ+FkDkomfRBrPM+9QYJSg+PxgAUL+LU3FneQk37rKR2/zjqkCV1BLHccX98wRXG3Sg==", "dev": true, "requires": { "infer-owner": "^1.0.4" } }, "@npmcli/run-script": { - "version": "1.8.4", - "resolved": "https://registry.npmjs.org/@npmcli/run-script/-/run-script-1.8.4.tgz", - "integrity": "sha512-Yd9HXTtF1JGDXZw0+SOn+mWLYS0e7bHBHVC/2C8yqs4wUrs/k8rwBSinD7rfk+3WG/MFGRZKxjyoD34Pch2E/A==", + "version": "1.8.5", "dev": true, "requires": { "@npmcli/node-gyp": "^1.0.2", @@ -19275,8 +17183,6 @@ "dependencies": { "read-package-json-fast": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/read-package-json-fast/-/read-package-json-fast-2.0.2.tgz", - "integrity": "sha512-5fyFUyO9B799foVk4n6ylcoAktG/FbE3jwRKxvwaeSrIunaoMc0u81dzXxjeAFKOce7O5KncdfwpGvvs6r5PsQ==", "dev": true, "requires": { "json-parse-even-better-errors": "^2.3.0", @@ -19286,74 +17192,44 @@ } }, "@schematics/angular": { - "version": "11.2.4", - "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-11.2.4.tgz", - "integrity": "sha512-HKWpcmfJfx5fryDdVGN1s+AmzOCKViQQGrEZmDTC2PhA6Vg+SOeMKesyFvdOqf4Ld1ZNYw9Kg94wrpz6rycP/Q==", + "version": "11.2.14", "dev": true, "requires": { - "@angular-devkit/core": "11.2.4", - "@angular-devkit/schematics": "11.2.4", + "@angular-devkit/core": "11.2.14", + "@angular-devkit/schematics": "11.2.14", "jsonc-parser": "3.0.0" } }, "@schematics/update": { - "version": "0.1102.4", - "resolved": "https://registry.npmjs.org/@schematics/update/-/update-0.1102.4.tgz", - "integrity": "sha512-YgwbnTAok1NcolqFicc4S4tFxASfXttWsbHju4XArym1/KQMUjY8ZOdj4pe56akzrWXuCexZFpjgoYyYyXBuYQ==", + "version": "0.1102.14", "dev": true, "requires": { - "@angular-devkit/core": "11.2.4", - "@angular-devkit/schematics": "11.2.4", + "@angular-devkit/core": "11.2.14", + "@angular-devkit/schematics": "11.2.14", "@yarnpkg/lockfile": "1.1.0", "ini": "2.0.0", "npm-package-arg": "^8.0.0", "pacote": "11.2.4", "semver": "7.3.4", "semver-intersect": "1.4.0" - }, - "dependencies": { - "semver": { - "version": "7.3.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.4.tgz", - "integrity": "sha512-tCfb2WLjqFAtXn4KEdxIhalnRtoKFN7nAwj0B3ZXCbQloV2tq5eDbcTmT68JJD3nRJq24/XgxtQKFIpQdtvmVw==", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } - } } }, "@start9labs/emver": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@start9labs/emver/-/emver-0.1.1.tgz", - "integrity": "sha512-UvholOAhRBATB/mSoovCqxZrZ/tEzIXOtGt5fEyKWiJp35cRTiku/XwI+MKY+TVJdqFPLqgPtwUQW6FqVhJUCw==" + "version": "0.1.4" + }, + "@stencil/core": { + "version": "2.6.0" }, "@tootallnate/once": { "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", - "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==", "dev": true }, - "@types/bn.js": { - "version": "4.11.6", - "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-4.11.6.tgz", - "integrity": "sha512-pqr857jrp2kPuO9uRjZ3PwnJTjoQy+fcdxvBTvHm6dkmEL9q+hDD/2j/0ELOBPtPnS8LjCX0gI9nbl8lVkadpg==", - "requires": { - "@types/node": "*" - } - }, - "@types/elliptic": { - "version": "6.4.12", - "resolved": "https://registry.npmjs.org/@types/elliptic/-/elliptic-6.4.12.tgz", - "integrity": "sha512-gP1KsqoouLJGH6IJa28x7PXb3cRqh83X8HCLezd2dF+XcAIMKYv53KV+9Zn6QA561E120uOqZBQ+Jy/cl+fviw==", - "requires": { - "@types/bn.js": "*" - } + "@trysound/sax": { + "version": "0.1.1", + "dev": true }, "@types/glob": { - "version": "7.1.3", - "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.1.3.tgz", - "integrity": "sha512-SEYeGAIQIQX8NN6LDKprLjbrd5dARM5EXsd8GI/A5l0apYI1fGMWgPHSe4ZKL4eozlAyI+doUE9XbYS4xCkQ1w==", + "version": "7.1.4", "dev": true, "requires": { "@types/minimatch": "*", @@ -19361,73 +17237,54 @@ } }, "@types/json-pointer": { - "version": "1.0.30", - "resolved": "https://registry.npmjs.org/@types/json-pointer/-/json-pointer-1.0.30.tgz", - "integrity": "sha1-uXPB95sfYdQkt9krlU4B5saO5m0=", + "version": "1.0.31", "dev": true }, "@types/json-schema": { - "version": "7.0.6", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.6.tgz", - "integrity": "sha512-3c+yGKvVP5Y9TYBEibGNR+kLtijnj7mYrXRg+WpFb2X9xm04g/DXYkfg4hmzJQosc9snFNUPkbYIhu+KAm6jJw==", + "version": "7.0.8", "dev": true }, "@types/marked": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@types/marked/-/marked-1.2.0.tgz", - "integrity": "sha512-Kj9T+GlJrQQbXL0R6/zuYLaqlrtTmEVXl5LojsjA3KbPn1IpetEUFwJWCi4aDgATtvaR5Yj5vqSGX9upoLbBng==", + "version": "2.0.4", "dev": true }, "@types/minimatch": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.3.tgz", - "integrity": "sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA==", + "version": "3.0.5", "dev": true }, "@types/node": { - "version": "14.14.10", - "resolved": "https://registry.npmjs.org/@types/node/-/node-14.14.10.tgz", - "integrity": "sha512-J32dgx2hw8vXrSbu4ZlVhn1Nm3GbeCFNw2FWL8S5QKucHGY0cyNwjdQdO+KMBZ4wpmC7KhLCiNsdk1RFRIYUQQ==" + "version": "15.14.2", + "dev": true }, "@types/parse-json": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==", - "dev": true - }, - "@types/q": { - "version": "1.5.4", - "resolved": "https://registry.npmjs.org/@types/q/-/q-1.5.4.tgz", - "integrity": "sha512-1HcDas8SEj4z1Wc696tH56G8OlRaH/sqZOynNNB+HF0WOeXPaxTtbYzJY2oEfiUxjSKjhCKr+MvR7dCHcEelug==", "dev": true }, "@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==", "dev": true }, "@types/uuid": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-8.3.0.tgz", - "integrity": "sha512-eQ9qFW/fhfGJF8WKHGEHZEyVWfZxrT+6CLIJGBcZPfxUh/+BnEj+UCGYMlr9qZuX/2AltsvwrGqp0LhEW8D0zQ==", + "version": "8.3.1", "dev": true }, "@types/webpack-sources": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/@types/webpack-sources/-/webpack-sources-0.1.8.tgz", - "integrity": "sha512-JHB2/xZlXOjzjBB6fMOpH1eQAfsrpqVVIbneE0Rok16WXwFaznaI5vfg75U5WgGJm7V9W1c4xeRQDjX/zwvghA==", + "version": "0.1.9", "dev": true, "requires": { "@types/node": "*", "@types/source-list-map": "*", "source-map": "^0.6.1" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "dev": true + } } }, "@webassemblyjs/ast": { "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.9.0.tgz", - "integrity": "sha512-C6wW5L+b7ogSDVqymbkkvuW9kruN//YisMED04xzeBBqjHa2FYnmvOlS6Xj68xWQRgWvI9cIglsjFowH/RJyEA==", "dev": true, "requires": { "@webassemblyjs/helper-module-context": "1.9.0", @@ -19437,26 +17294,18 @@ }, "@webassemblyjs/floating-point-hex-parser": { "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==", "dev": true }, "@webassemblyjs/helper-api-error": { "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.9.0.tgz", - "integrity": "sha512-NcMLjoFMXpsASZFxJ5h2HZRcEhDkvnNFOAKneP5RbKRzaWJN36NC4jqQHKwStIhGXu5mUWlUUk7ygdtrO8lbmw==", "dev": true }, "@webassemblyjs/helper-buffer": { "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.9.0.tgz", - "integrity": "sha512-qZol43oqhq6yBPx7YM3m9Bv7WMV9Eevj6kMi6InKOuZxhw+q9hOkvq5e/PpKSiLfyetpaBnogSbNCfBwyB00CA==", "dev": true }, "@webassemblyjs/helper-code-frame": { "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==", "dev": true, "requires": { "@webassemblyjs/wast-printer": "1.9.0" @@ -19464,14 +17313,10 @@ }, "@webassemblyjs/helper-fsm": { "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-fsm/-/helper-fsm-1.9.0.tgz", - "integrity": "sha512-OPRowhGbshCb5PxJ8LocpdX9Kl0uB4XsAjl6jH/dWKlk/mzsANvhwbiULsaiqT5GZGT9qinTICdj6PLuM5gslw==", "dev": true }, "@webassemblyjs/helper-module-context": { "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==", "dev": true, "requires": { "@webassemblyjs/ast": "1.9.0" @@ -19479,14 +17324,10 @@ }, "@webassemblyjs/helper-wasm-bytecode": { "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==", "dev": true }, "@webassemblyjs/helper-wasm-section": { "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==", "dev": true, "requires": { "@webassemblyjs/ast": "1.9.0", @@ -19497,8 +17338,6 @@ }, "@webassemblyjs/ieee754": { "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.9.0.tgz", - "integrity": "sha512-dcX8JuYU/gvymzIHc9DgxTzUUTLexWwt8uCTWP3otys596io0L5aW02Gb1RjYpx2+0Jus1h4ZFqjla7umFniTg==", "dev": true, "requires": { "@xtuc/ieee754": "^1.2.0" @@ -19506,8 +17345,6 @@ }, "@webassemblyjs/leb128": { "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.9.0.tgz", - "integrity": "sha512-ENVzM5VwV1ojs9jam6vPys97B/S65YQtv/aanqnU7D8aSoHFX8GyhGg0CMfyKNIHBuAVjy3tlzd5QMMINa7wpw==", "dev": true, "requires": { "@xtuc/long": "4.2.2" @@ -19515,14 +17352,10 @@ }, "@webassemblyjs/utf8": { "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.9.0.tgz", - "integrity": "sha512-GZbQlWtopBTP0u7cHrEx+73yZKrQoBMpwkGEIqlacljhXCkVM1kMQge/Mf+csMJAjEdSwhOyLAS0AoR3AG5P8w==", "dev": true }, "@webassemblyjs/wasm-edit": { "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.9.0.tgz", - "integrity": "sha512-FgHzBm80uwz5M8WKnMTn6j/sVbqilPdQXTWraSjBwFXSYGirpkSWE2R9Qvz9tNiTKQvoKILpCuTjBKzOIm0nxw==", "dev": true, "requires": { "@webassemblyjs/ast": "1.9.0", @@ -19537,8 +17370,6 @@ }, "@webassemblyjs/wasm-gen": { "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.9.0.tgz", - "integrity": "sha512-cPE3o44YzOOHvlsb4+E9qSqjc9Qf9Na1OO/BHFy4OI91XDE14MjFN4lTMezzaIWdPqHnsTodGGNP+iRSYfGkjA==", "dev": true, "requires": { "@webassemblyjs/ast": "1.9.0", @@ -19550,8 +17381,6 @@ }, "@webassemblyjs/wasm-opt": { "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.9.0.tgz", - "integrity": "sha512-Qkjgm6Anhm+OMbIL0iokO7meajkzQD71ioelnfPEj6r4eOFuqm4YC3VBPqXjFyyNwowzbMD+hizmprP/Fwkl2A==", "dev": true, "requires": { "@webassemblyjs/ast": "1.9.0", @@ -19562,8 +17391,6 @@ }, "@webassemblyjs/wasm-parser": { "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.9.0.tgz", - "integrity": "sha512-9+wkMowR2AmdSWQzsPEjFU7njh8HTO5MqO8vjwEHuM+AMHioNqSBONRdr0NQQ3dVQrzp0s8lTcYqzUdb7YgELA==", "dev": true, "requires": { "@webassemblyjs/ast": "1.9.0", @@ -19576,8 +17403,6 @@ }, "@webassemblyjs/wast-parser": { "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==", "dev": true, "requires": { "@webassemblyjs/ast": "1.9.0", @@ -19590,8 +17415,6 @@ }, "@webassemblyjs/wast-printer": { "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==", "dev": true, "requires": { "@webassemblyjs/ast": "1.9.0", @@ -19601,38 +17424,26 @@ }, "@xtuc/ieee754": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", - "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", "dev": true }, "@xtuc/long": { "version": "4.2.2", - "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", - "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", "dev": true }, "@yarnpkg/lockfile": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@yarnpkg/lockfile/-/lockfile-1.1.0.tgz", - "integrity": "sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ==", "dev": true }, "abab": { "version": "2.0.5", - "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.5.tgz", - "integrity": "sha512-9IK9EadsbHo6jLWIpxpR6pL0sazTXV6+SQv25ZB+F7Bj9mJNaOc4nCRabwd5M/JwmUa8idz6Eci6eKfJryPs6Q==", "dev": true }, "abbrev": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", - "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", "dev": true }, "accepts": { "version": "1.3.7", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", - "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==", "dev": true, "requires": { "mime-types": "~2.1.24", @@ -19641,14 +17452,10 @@ }, "acorn": { "version": "6.4.2", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.4.2.tgz", - "integrity": "sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ==", "dev": true }, "adjust-sourcemap-loader": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/adjust-sourcemap-loader/-/adjust-sourcemap-loader-3.0.0.tgz", - "integrity": "sha512-YBrGyT2/uVQ/c6Rr+t6ZJXniY03YtHGMJQYal368burRGYKqhx9qGTWqcBU5s1CwYY9E/ri63RYyG1IacMZtqw==", + "version": "4.0.0", "dev": true, "requires": { "loader-utils": "^2.0.0", @@ -19657,8 +17464,6 @@ }, "agent-base": { "version": "6.0.2", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", - "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", "dev": true, "requires": { "debug": "4" @@ -19666,8 +17471,6 @@ }, "agentkeepalive": { "version": "4.1.4", - "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.1.4.tgz", - "integrity": "sha512-+V/rGa3EuU74H6wR04plBb7Ks10FbtUQgRj/FQOG7uUIEuaINI+AiqJR1k6t3SVNs7o7ZjIdus6706qqzVq8jQ==", "dev": true, "requires": { "debug": "^4.1.0", @@ -19677,8 +17480,6 @@ }, "aggregate-error": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", - "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", "dev": true, "requires": { "clean-stack": "^2.0.0", @@ -19687,8 +17488,6 @@ }, "ajv": { "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "requires": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", @@ -19698,28 +17497,20 @@ }, "ajv-errors": { "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==", "dev": true, "requires": {} }, "ajv-keywords": { "version": "3.5.2", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", - "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", "dev": true, "requires": {} }, "alphanum-sort": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/alphanum-sort/-/alphanum-sort-1.0.2.tgz", - "integrity": "sha1-l6ERlkmyEa0zaR2fn0hqjsn74KM=", "dev": true }, "angularx-qrcode": { - "version": "10.0.11", - "resolved": "https://registry.npmjs.org/angularx-qrcode/-/angularx-qrcode-10.0.11.tgz", - "integrity": "sha512-sbtqdqAboEFNoyxgG4FQYPZDzwX9TlICT2mLpsC/Se3OuT+HntW56q8E/i1BL1fJhx7zt0JJR7bc7LfofUeAlQ==", + "version": "11.0.0", "requires": { "qrcode": "1.4.2", "tslib": "^2.0.0" @@ -19727,42 +17518,31 @@ }, "ansi-colors": { "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", - "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", "dev": true }, "ansi-escapes": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.1.tgz", - "integrity": "sha512-JWF7ocqNrp8u9oqpgV+wH5ftbt+cfvv+PTjOvKLT3AdYly/LmORARfEVT1iyjwN+4MqE5UmVKoAdIBqeoCHgLA==", + "version": "4.3.2", "dev": true, "requires": { - "type-fest": "^0.11.0" + "type-fest": "^0.21.3" } }, "ansi-html": { "version": "0.0.7", - "resolved": "https://registry.npmjs.org/ansi-html/-/ansi-html-0.0.7.tgz", - "integrity": "sha1-gTWEAhliqenm/QOflA0S9WynhZ4=", "dev": true }, "ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==" + "version": "5.0.0", + "dev": true }, "ansi-styles": { "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==", "requires": { "color-convert": "^1.9.0" } }, "anymatch": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.1.tgz", - "integrity": "sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg==", + "version": "3.1.2", "dev": true, "requires": { "normalize-path": "^3.0.0", @@ -19771,14 +17551,10 @@ }, "aproba": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", - "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==", "dev": true }, "are-we-there-yet": { "version": "1.1.5", - "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz", - "integrity": "sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w==", "dev": true, "requires": { "delegates": "^1.0.0", @@ -19787,14 +17563,10 @@ "dependencies": { "isarray": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", "dev": true }, "readable-stream": { "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", "dev": true, "requires": { "core-util-is": "~1.0.0", @@ -19806,16 +17578,8 @@ "util-deprecate": "~1.0.1" } }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, "string_decoder": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "dev": true, "requires": { "safe-buffer": "~5.1.0" @@ -19825,71 +17589,45 @@ }, "arg": { "version": "4.1.3", - "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", - "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", "dev": true }, "argparse": { "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", "dev": true, "requires": { "sprintf-js": "~1.0.2" } }, - "arity-n": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/arity-n/-/arity-n-1.0.4.tgz", - "integrity": "sha1-2edrEXM+CFacCEeuezmyhgswt0U=", - "dev": true - }, "arr-diff": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", - "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", "dev": true }, "arr-flatten": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", - "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", "dev": true }, "arr-union": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", - "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=", "dev": true }, "array-flatten": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.2.tgz", - "integrity": "sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ==", + "version": "1.1.1", "dev": true }, "array-union": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", "dev": true }, "array-uniq": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", - "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=", "dev": true }, "array-unique": { "version": "0.3.2", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", - "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", "dev": true }, "asn1": { "version": "0.2.4", - "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", - "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", "dev": true, "requires": { "safer-buffer": "~2.1.0" @@ -19897,19 +17635,22 @@ }, "asn1.js": { "version": "5.4.1", - "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-5.4.1.tgz", - "integrity": "sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA==", + "dev": true, "requires": { "bn.js": "^4.0.0", "inherits": "^2.0.1", "minimalistic-assert": "^1.0.0", "safer-buffer": "^2.1.0" + }, + "dependencies": { + "bn.js": { + "version": "4.12.0", + "dev": true + } } }, "assert": { "version": "1.5.0", - "resolved": "https://registry.npmjs.org/assert/-/assert-1.5.0.tgz", - "integrity": "sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA==", "dev": true, "requires": { "object-assign": "^4.1.1", @@ -19918,14 +17659,10 @@ "dependencies": { "inherits": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", - "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=", "dev": true }, "util": { "version": "0.10.3", - "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz", - "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=", "dev": true, "requires": { "inherits": "2.0.1" @@ -19935,26 +17672,18 @@ }, "assert-plus": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", "dev": true }, "assign-symbols": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", - "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=", "dev": true }, "astral-regex": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", - "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", "dev": true }, "async": { "version": "2.6.3", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.3.tgz", - "integrity": "sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==", "dev": true, "requires": { "lodash": "^4.17.14" @@ -19962,89 +17691,62 @@ }, "async-each": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.3.tgz", - "integrity": "sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ==", "dev": true }, "async-limiter": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz", - "integrity": "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==", "dev": true }, "asynckit": { "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", "dev": true }, "at-least-node": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", - "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", "dev": true }, "atob": { "version": "2.1.2", - "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", - "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", "dev": true }, "autoprefixer": { - "version": "9.8.6", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-9.8.6.tgz", - "integrity": "sha512-XrvP4VVHdRBCdX1S3WXVD8+RyG9qeb1D5Sn1DeLiG2xfSpzellk5k54xbUERJ3M5DggQxes39UGOTP8CFrEGbg==", + "version": "10.2.4", "dev": true, "requires": { - "browserslist": "^4.12.0", - "caniuse-lite": "^1.0.30001109", + "browserslist": "^4.16.1", + "caniuse-lite": "^1.0.30001181", "colorette": "^1.2.1", + "fraction.js": "^4.0.13", "normalize-range": "^0.1.2", - "num2fraction": "^1.2.2", - "postcss": "^7.0.32", "postcss-value-parser": "^4.1.0" + }, + "dependencies": { + "colorette": { + "version": "1.2.2", + "dev": true + } } }, "aws-sign2": { "version": "0.7.0", - "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", - "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=", "dev": true }, "aws4": { "version": "1.11.0", - "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.11.0.tgz", - "integrity": "sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==", "dev": true }, "babel-loader": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.1.0.tgz", - "integrity": "sha512-7q7nC1tYOrqvUrN3LQK4GwSk/TQorZSOlO9C+RZDZpODgyN4ZlCqE5q9cDsyWOliN+aU9B4JX01xK9eJXowJLw==", + "version": "8.2.2", "dev": true, "requires": { - "find-cache-dir": "^2.1.0", + "find-cache-dir": "^3.3.1", "loader-utils": "^1.4.0", - "mkdirp": "^0.5.3", - "pify": "^4.0.1", + "make-dir": "^3.1.0", "schema-utils": "^2.6.5" }, "dependencies": { - "find-cache-dir": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.1.0.tgz", - "integrity": "sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==", - "dev": true, - "requires": { - "commondir": "^1.0.1", - "make-dir": "^2.0.0", - "pkg-dir": "^3.0.0" - } - }, "json5": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", "dev": true, "requires": { "minimist": "^1.2.0" @@ -20052,8 +17754,6 @@ }, "loader-utils": { "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", - "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", "dev": true, "requires": { "big.js": "^5.2.2", @@ -20065,23 +17765,17 @@ }, "babel-plugin-dynamic-import-node": { "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==", "dev": true, "requires": { "object.assign": "^4.1.0" } }, "balanced-match": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", - "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", + "version": "1.0.2", "dev": true }, "base": { "version": "0.11.2", - "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", - "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", "dev": true, "requires": { "cache-base": "^1.0.1", @@ -20095,225 +17789,55 @@ "dependencies": { "define-property": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", "dev": true, "requires": { "is-descriptor": "^1.0.0" } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } } } }, - "base-x": { - "version": "3.0.8", - "resolved": "https://registry.npmjs.org/base-x/-/base-x-3.0.8.tgz", - "integrity": "sha512-Rl/1AWP4J/zRrk54hhlxH4drNxPJXYUaKffODVI53/dAsV4t9fBxyxYKAVPU1XBHxYwOWP9h9H0hM2MVw4YfJA==", - "requires": { - "safe-buffer": "^5.0.1" - } - }, - "base32.js": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/base32.js/-/base32.js-0.1.0.tgz", - "integrity": "sha1-tYLexpPC8R6JPPBk7mrFthMaIgI=" - }, "base64-js": { "version": "1.5.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", - "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", "dev": true }, - "base64url": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/base64url/-/base64url-3.0.1.tgz", - "integrity": "sha512-ir1UPr3dkwexU7FdV8qBBbNDRUhMmIekYMFZfi+C/sLNnRESKPl23nB9b2pltqfOQNnGzsDdId90AEtG5tCx4A==" - }, "batch": { "version": "0.6.1", - "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", - "integrity": "sha1-3DQxT05nkxgJP8dgJyUl+UvyXBY=", "dev": true }, "bcrypt-pbkdf": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", - "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", "dev": true, "requires": { "tweetnacl": "^0.14.3" } }, - "bech32": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/bech32/-/bech32-1.1.4.tgz", - "integrity": "sha512-s0IrSOzLlbvX7yp4WBfPITzpAU8sqQcpsmwXDiKwrG4r491vwCO/XpejasRNl0piBMe/DvP4Tz0mIS/X1DPJBQ==" - }, "big.js": { "version": "5.2.2", - "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", - "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", "dev": true }, "binary-extensions": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.1.0.tgz", - "integrity": "sha512-1Yj8h9Q+QDF5FzhMs/c9+6UntbD5MkRfRwac8DoEm9ZfUBZ7tZ55YcGVAzEe4bXsdQHEk+s9S5wsOKVdZrw0tQ==", + "version": "2.2.0", "dev": true }, - "bindings": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", - "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", - "requires": { - "file-uri-to-path": "1.0.0" - } - }, - "bip174": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/bip174/-/bip174-2.0.1.tgz", - "integrity": "sha512-i3X26uKJOkDTAalYAp0Er+qGMDhrbbh2o93/xiPyAN2s25KrClSpe3VXo/7mNJoqA5qfko8rLS2l3RWZgYmjKQ==" - }, - "bip32": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/bip32/-/bip32-2.0.6.tgz", - "integrity": "sha512-HpV5OMLLGTjSVblmrtYRfFFKuQB+GArM0+XP8HGWfJ5vxYBqo+DesvJwOdC2WJ3bCkZShGf0QIfoIpeomVzVdA==", - "requires": { - "@types/node": "10.12.18", - "bs58check": "^2.1.1", - "create-hash": "^1.2.0", - "create-hmac": "^1.1.7", - "tiny-secp256k1": "^1.1.3", - "typeforce": "^1.11.5", - "wif": "^2.0.6" - }, - "dependencies": { - "@types/node": { - "version": "10.12.18", - "resolved": "https://registry.npmjs.org/@types/node/-/node-10.12.18.tgz", - "integrity": "sha512-fh+pAqt4xRzPfqA6eh3Z2y6fyZavRIumvjhaCL753+TVkGKGhpPeyrJG2JftD0T9q4GF00KjefsQ+PQNDdWQaQ==" - } - } - }, - "bip39": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/bip39/-/bip39-3.0.3.tgz", - "integrity": "sha512-P0dKrz4g0V0BjXfx7d9QNkJ/Txcz/k+hM9TnjqjUaXtuOfAvxXSw2rJw8DX0e3ZPwnK/IgDxoRqf0bvoVCqbMg==", - "requires": { - "@types/node": "11.11.6", - "create-hash": "^1.1.0", - "pbkdf2": "^3.0.9", - "randombytes": "^2.0.1" - }, - "dependencies": { - "@types/node": { - "version": "11.11.6", - "resolved": "https://registry.npmjs.org/@types/node/-/node-11.11.6.tgz", - "integrity": "sha512-Exw4yUWMBXM3X+8oqzJNRqZSwUAaS4+7NdvHqQuFi/d+synz++xmX3QIf+BFqneW8N31R8Ky+sikfZUXq07ggQ==" - } - } - }, - "bip66": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/bip66/-/bip66-1.1.5.tgz", - "integrity": "sha1-AfqHSHhcpwlV1QESF9GzE5lpyiI=", - "requires": { - "safe-buffer": "^5.0.1" - } - }, - "bitcoin-ops": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/bitcoin-ops/-/bitcoin-ops-1.4.1.tgz", - "integrity": "sha512-pef6gxZFztEhaE9RY9HmWVmiIHqCb2OyS4HPKkpc6CIiiOa3Qmuoylxc5P2EkU3w+5eTSifI9SEZC88idAIGow==" - }, - "bitcoinjs-lib": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/bitcoinjs-lib/-/bitcoinjs-lib-5.2.0.tgz", - "integrity": "sha512-5DcLxGUDejgNBYcieMIUfjORtUeNWl828VWLHJGVKZCb4zIS1oOySTUr0LGmcqJBQgTBz3bGbRQla4FgrdQEIQ==", - "requires": { - "bech32": "^1.1.2", - "bip174": "^2.0.1", - "bip32": "^2.0.4", - "bip66": "^1.1.0", - "bitcoin-ops": "^1.4.0", - "bs58check": "^2.0.0", - "create-hash": "^1.1.0", - "create-hmac": "^1.1.3", - "merkle-lib": "^2.0.10", - "pushdata-bitcoin": "^1.0.1", - "randombytes": "^2.0.1", - "tiny-secp256k1": "^1.1.1", - "typeforce": "^1.11.3", - "varuint-bitcoin": "^1.0.4", - "wif": "^2.0.1" - } - }, "bl": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", - "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", "dev": true, "requires": { "buffer": "^5.5.0", "inherits": "^2.0.4", "readable-stream": "^3.4.0" - }, - "dependencies": { - "buffer": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", - "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", - "dev": true, - "requires": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" - } - } } }, "bluebird": { "version": "3.7.2", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", - "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", "dev": true }, "bn.js": { - "version": "4.11.9", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", - "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==" + "version": "5.2.0", + "dev": true }, "body-parser": { "version": "1.19.0", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz", - "integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==", "dev": true, "requires": { "bytes": "3.1.0", @@ -20328,42 +17852,21 @@ "type-is": "~1.6.17" }, "dependencies": { - "bytes": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", - "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==", - "dev": true - }, "debug": { "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dev": true, "requires": { "ms": "2.0.0" } }, - "iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "dev": true, - "requires": { - "safer-buffer": ">= 2.1.2 < 3" - } - }, "ms": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", "dev": true } } }, "bonjour": { "version": "3.5.0", - "resolved": "https://registry.npmjs.org/bonjour/-/bonjour-3.5.0.tgz", - "integrity": "sha1-jokKGD2O6aI5OzhExpGkK897yfU=", "dev": true, "requires": { "array-flatten": "^2.1.0", @@ -20372,18 +17875,20 @@ "dns-txt": "^2.0.2", "multicast-dns": "^6.0.1", "multicast-dns-service-types": "^1.1.0" + }, + "dependencies": { + "array-flatten": { + "version": "2.1.2", + "dev": true + } } }, "boolbase": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", - "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=", "dev": true }, "brace-expansion": { "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, "requires": { "balanced-match": "^1.0.0", @@ -20392,8 +17897,6 @@ }, "braces": { "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", "dev": true, "requires": { "fill-range": "^7.0.1" @@ -20401,13 +17904,10 @@ }, "brorand": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", - "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=" + "dev": true }, "browserify-aes": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", - "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", "dev": true, "requires": { "buffer-xor": "^1.0.3", @@ -20420,8 +17920,6 @@ }, "browserify-cipher": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz", - "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==", "dev": true, "requires": { "browserify-aes": "^1.0.4", @@ -20431,8 +17929,6 @@ }, "browserify-des": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz", - "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==", "dev": true, "requires": { "cipher-base": "^1.0.1", @@ -20443,26 +17939,14 @@ }, "browserify-rsa": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.1.0.tgz", - "integrity": "sha512-AdEER0Hkspgno2aR97SAf6vi0y0k8NuOpGnVH3O99rcA5Q6sh8QxcngtHuJ6uXwnfAXNM4Gn1Gb7/MV1+Ymbog==", "dev": true, "requires": { "bn.js": "^5.0.0", "randombytes": "^2.0.1" - }, - "dependencies": { - "bn.js": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.1.3.tgz", - "integrity": "sha512-GkTiFpjFtUzU9CbMeJ5iazkCzGL3jrhzerzZIuqLABjbwRaFt33I9tUdSNryIptM+RxDet6OKm2WnLXzW51KsQ==", - "dev": true - } } }, "browserify-sign": { "version": "4.2.1", - "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.2.1.tgz", - "integrity": "sha512-/vrA5fguVAKKAVTNJjgSm1tRQDHUU6DbwO9IROu/0WAzC8PKhucDSh18J0RMvVeHAn5puMd+QHC2erPRNf8lmg==", "dev": true, "requires": { "bn.js": "^5.1.1", @@ -20476,119 +17960,74 @@ "safe-buffer": "^5.2.0" }, "dependencies": { - "bn.js": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.1.3.tgz", - "integrity": "sha512-GkTiFpjFtUzU9CbMeJ5iazkCzGL3jrhzerzZIuqLABjbwRaFt33I9tUdSNryIptM+RxDet6OKm2WnLXzW51KsQ==", + "safe-buffer": { + "version": "5.2.1", "dev": true } } }, "browserify-zlib": { "version": "0.2.0", - "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz", - "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==", "dev": true, "requires": { "pako": "~1.0.5" } }, "browserslist": { - "version": "4.15.0", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.15.0.tgz", - "integrity": "sha512-IJ1iysdMkGmjjYeRlDU8PQejVwxvVO5QOfXH7ylW31GO6LwNRSmm/SgRXtNsEXqMLl2e+2H5eEJ7sfynF8TCaQ==", + "version": "4.16.6", "dev": true, "requires": { - "caniuse-lite": "^1.0.30001164", - "colorette": "^1.2.1", - "electron-to-chromium": "^1.3.612", + "caniuse-lite": "^1.0.30001219", + "colorette": "^1.2.2", + "electron-to-chromium": "^1.3.723", "escalade": "^3.1.1", - "node-releases": "^1.1.67" - } - }, - "bs58": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/bs58/-/bs58-4.0.1.tgz", - "integrity": "sha1-vhYedsNU9veIrkBx9j806MTwpCo=", - "requires": { - "base-x": "^3.0.2" - } - }, - "bs58check": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/bs58check/-/bs58check-2.1.2.tgz", - "integrity": "sha512-0TS1jicxdU09dwJMNZtVAfzPi6Q6QeN0pM1Fkzrjn+XYHvzMKPU3pHVpva+769iNVSfIYWf7LJ6WR+BuuMf8cA==", - "requires": { - "bs58": "^4.0.0", - "create-hash": "^1.1.0", - "safe-buffer": "^5.1.2" - } - }, - "buffer": { - "version": "4.9.2", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.2.tgz", - "integrity": "sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==", - "dev": true, - "requires": { - "base64-js": "^1.0.2", - "ieee754": "^1.1.4", - "isarray": "^1.0.0" + "node-releases": "^1.1.71" }, "dependencies": { - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "colorette": { + "version": "1.2.2", "dev": true } } }, + "buffer": { + "version": "5.7.1", + "dev": true, + "requires": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, "buffer-from": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", - "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==", "dev": true }, "buffer-indexof": { "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==", "dev": true }, "buffer-xor": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", - "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=", "dev": true }, "builtin-modules": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz", - "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=", "dev": true }, "builtin-status-codes": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz", - "integrity": "sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug=", "dev": true }, "builtins": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/builtins/-/builtins-1.0.3.tgz", - "integrity": "sha1-y5T662HIaWRR2zZTThQi+U8K7og=", "dev": true }, "bytes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", - "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=", + "version": "3.1.0", "dev": true }, "cacache": { "version": "15.0.5", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-15.0.5.tgz", - "integrity": "sha512-lloiL22n7sOjEEXdL8NAjTgv9a1u43xICE9/203qonkZUCj5X1UEWIdf2/Y0d6QcCtMzbKQyhrcDbdvlZTs/+A==", "dev": true, "requires": { "@npmcli/move-file": "^1.0.1", @@ -20608,20 +18047,10 @@ "ssri": "^8.0.0", "tar": "^6.0.2", "unique-filename": "^1.1.1" - }, - "dependencies": { - "mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "dev": true - } } }, "cache-base": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", - "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", "dev": true, "requires": { "collection-visit": "^1.0.0", @@ -20636,48 +18065,23 @@ } }, "call-bind": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.0.tgz", - "integrity": "sha512-AEXsYIyyDY3MCzbwdhzG3Jx1R0J2wetQyUynn6dYHAO+bg8l1k7jwZtRv4ryryFs7EP+NDlikJlVe59jr0cM2w==", + "version": "1.0.2", "dev": true, "requires": { "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.0" - } - }, - "caller-callsite": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/caller-callsite/-/caller-callsite-2.0.0.tgz", - "integrity": "sha1-hH4PzgoiN1CpoCfFSzNzGtMVQTQ=", - "dev": true, - "requires": { - "callsites": "^2.0.0" - } - }, - "caller-path": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-2.0.0.tgz", - "integrity": "sha1-Ro+DBE42mrIBD6xfBs7uFbsssfQ=", - "dev": true, - "requires": { - "caller-callsite": "^2.0.0" + "get-intrinsic": "^1.0.2" } }, "callsites": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-2.0.0.tgz", - "integrity": "sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA=", + "version": "3.1.0", "dev": true }, "camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==" + "version": "6.2.0", + "dev": true }, "caniuse-api": { "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==", "dev": true, "requires": { "browserslist": "^4.0.0", @@ -20687,27 +18091,19 @@ } }, "caniuse-lite": { - "version": "1.0.30001164", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001164.tgz", - "integrity": "sha512-G+A/tkf4bu0dSp9+duNiXc7bGds35DioCyC6vgK2m/rjA4Krpy5WeZgZyfH2f0wj2kI6yAWWucyap6oOwmY1mg==", + "version": "1.0.30001243", "dev": true }, "canonical-path": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/canonical-path/-/canonical-path-1.0.0.tgz", - "integrity": "sha512-feylzsbDxi1gPZ1IjystzIQZagYYLvfKrSuygUCgf7z6x790VEzze5QEkdSV1U58RA7Hi0+v6fv4K54atOzATg==", "dev": true }, "caseless": { "version": "0.12.0", - "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", - "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", "dev": true }, "chalk": { "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", "dev": true, "requires": { "ansi-styles": "^3.2.1", @@ -20717,14 +18113,10 @@ }, "chardet": { "version": "0.7.0", - "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", - "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", "dev": true }, "cheerio": { "version": "1.0.0-rc.3", - "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.3.tgz", - "integrity": "sha512-0td5ijfUPuubwLUu0OBoe98gZj8C/AA+RW3v67GPlGOrvxWjZmBXiBCRU+I8VEiNyJzjth40POfHiz2RB3gImA==", "dev": true, "requires": { "css-select": "~1.2.0", @@ -20733,122 +18125,45 @@ "htmlparser2": "^3.9.1", "lodash": "^4.15.0", "parse5": "^3.0.1" - }, - "dependencies": { - "css-select": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-1.2.0.tgz", - "integrity": "sha1-KzoRBTnFNV8c2NMUYj6HCxIeyFg=", - "dev": true, - "requires": { - "boolbase": "~1.0.0", - "css-what": "2.1", - "domutils": "1.5.1", - "nth-check": "~1.0.1" - } - }, - "css-what": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-2.1.3.tgz", - "integrity": "sha512-a+EPoD+uZiNfh+5fxw2nO9QwFa6nJe2Or35fGY6Ipw1R3R4AGz1d1TEZrCegvw2YTmZ0jXirGYlzxxpYSHwpEg==", - "dev": true - }, - "dom-serializer": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.1.tgz", - "integrity": "sha512-l0IU0pPzLWSHBcieZbpOKgkIn3ts3vAh7ZuFyXNwJxJXk/c4Gwj9xaTJwIDVQCXawWD0qb3IzMGH5rglQaO0XA==", - "dev": true, - "requires": { - "domelementtype": "^1.3.0", - "entities": "^1.1.1" - } - }, - "domutils": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz", - "integrity": "sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8=", - "dev": true, - "requires": { - "dom-serializer": "0", - "domelementtype": "1" - } - }, - "entities": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz", - "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==", - "dev": true - }, - "parse5": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-3.0.3.tgz", - "integrity": "sha512-rgO9Zg5LLLkfJF9E6CCmXlSE4UVceloys8JrFqCcHloC3usd/kJCyPDwH2SOlzix2j3xaP9sUX3e8+kvkuleAA==", - "dev": true, - "requires": { - "@types/node": "*" - } - } } }, "chokidar": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.4.3.tgz", - "integrity": "sha512-DtM3g7juCXQxFVSNPNByEC2+NImtBuxQQvWlHunpJIS5Ocr0lG306cC7FCi7cEA0fzmybPUIl4txBIobk1gGOQ==", + "version": "3.5.2", "dev": true, "requires": { - "anymatch": "~3.1.1", + "anymatch": "~3.1.2", "braces": "~3.0.2", - "fsevents": "~2.1.2", - "glob-parent": "~5.1.0", + "fsevents": "~2.3.2", + "glob-parent": "~5.1.2", "is-binary-path": "~2.1.0", "is-glob": "~4.0.1", "normalize-path": "~3.0.0", - "readdirp": "~3.5.0" + "readdirp": "~3.6.0" } }, "chownr": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", - "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", "dev": true }, "chrome-trace-event": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.2.tgz", - "integrity": "sha512-9e/zx1jw7B4CO+c/RXoCsfg/x1AfUBioy4owYH0bJprEYAx5hRFLRhWBqHAG57D0ZM4H7vxbP7bPe0VwhQRYDQ==", - "dev": true, - "requires": { - "tslib": "^1.9.0" - }, - "dependencies": { - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - } - } + "version": "1.0.3", + "dev": true }, "cipher-base": { "version": "1.0.4", - "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", - "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", + "dev": true, "requires": { "inherits": "^2.0.1", "safe-buffer": "^5.0.1" } }, "circular-dependency-plugin": { - "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==", + "version": "5.2.2", "dev": true, "requires": {} }, "class-utils": { "version": "0.3.6", - "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", - "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", "dev": true, "requires": { "arr-union": "^3.1.0", @@ -20859,56 +18174,92 @@ "dependencies": { "define-property": { "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", "dev": true, "requires": { "is-descriptor": "^0.1.0" } + }, + "is-accessor-descriptor": { + "version": "0.1.6", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-data-descriptor": { + "version": "0.1.4", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-descriptor": { + "version": "0.1.6", + "dev": true, + "requires": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + } + }, + "kind-of": { + "version": "5.1.0", + "dev": true } } }, "clean-stack": { "version": "2.2.0", - "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", - "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", "dev": true }, "cli-cursor": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", - "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", "dev": true, "requires": { "restore-cursor": "^3.1.0" } }, "cli-spinners": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.5.0.tgz", - "integrity": "sha512-PC+AmIuK04E6aeSs/pUccSujsTzBhu4HzC2dL+CfJB/Jcc2qTRbEwZQDfIUpt2Xl8BodYBEq8w4fc0kU2I9DjQ==", + "version": "2.6.0", "dev": true }, "cli-width": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz", - "integrity": "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==", "dev": true }, "cliui": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", - "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", + "version": "7.0.4", + "dev": true, "requires": { - "string-width": "^3.1.0", - "strip-ansi": "^5.2.0", - "wrap-ansi": "^5.1.0" + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" } }, + "clone": { + "version": "1.0.4", + "dev": true + }, "clone-deep": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", - "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", "dev": true, "requires": { "is-plain-object": "^2.0.4", @@ -20916,117 +18267,59 @@ "shallow-clone": "^3.0.0" } }, - "coa": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/coa/-/coa-2.0.2.tgz", - "integrity": "sha512-q5/jG+YQnSy4nRTV4F7lPepBJZ8qBNJJDBuJdoejDyLXgmL7IEo+Le2JDZudFTFt7mrCqIRaSjws4ygRCTCAXA==", - "dev": true, - "requires": { - "@types/q": "^1.5.1", - "chalk": "^2.4.1", - "q": "^1.1.2" - } - }, "code-point-at": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", - "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", "dev": true }, "collection-visit": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", - "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", "dev": true, "requires": { "map-visit": "^1.0.0", "object-visit": "^1.0.0" } }, - "color": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/color/-/color-3.1.3.tgz", - "integrity": "sha512-xgXAcTHa2HeFCGLE9Xs/R82hujGtu9Jd9x4NW3T34+OMs7VoPsjwzRczKHvTAHeJwWFwX5j15+MgAppE8ztObQ==", - "dev": true, - "requires": { - "color-convert": "^1.9.1", - "color-string": "^1.5.4" - } - }, "color-convert": { "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", "requires": { "color-name": "1.1.3" } }, "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + "version": "1.1.3" }, - "color-string": { - "version": "1.5.4", - "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.5.4.tgz", - "integrity": "sha512-57yF5yt8Xa3czSEW1jfQDE79Idk0+AkN/4KWad6tbdxUmAs3MvjxlWSWD4deYytcRfoZ9nhKyFl1kj5tBvidbw==", - "dev": true, - "requires": { - "color-name": "^1.0.0", - "simple-swizzle": "^0.2.2" - } + "colord": { + "version": "2.1.0", + "dev": true }, "colorette": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.2.1.tgz", - "integrity": "sha512-puCDz0CzydiSYOrnXpz/PKd69zRrribezjtE9yd4zvytoRc8+RY/KJPvtPFKZS3E3wP6neGyMe0vOTlHO5L3Pw==", + "version": "1.1.0", "dev": true }, "combined-stream": { "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", "dev": true, "requires": { "delayed-stream": "~1.0.0" } }, "commander": { - "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==", + "version": "7.2.0", "dev": true }, "commondir": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", - "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=", "dev": true }, "compare-versions": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/compare-versions/-/compare-versions-3.6.0.tgz", - "integrity": "sha512-W6Af2Iw1z4CB7q4uU4hv646dW9GQuBM+YpC0UvUCWSD8w90SJjp+ujJuXaEMtAXBtSqGfMPuFOVn4/+FlaqfBA==" + "version": "3.6.0" }, "component-emitter": { "version": "1.3.0", - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", - "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==", "dev": true }, - "compose-function": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/compose-function/-/compose-function-3.0.3.tgz", - "integrity": "sha1-ntZ18TzFRQHTCVCkhv9qe6OrGF8=", - "dev": true, - "requires": { - "arity-n": "^1.0.4" - } - }, "compressible": { "version": "2.0.18", - "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", - "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", "dev": true, "requires": { "mime-db": ">= 1.43.0 < 2" @@ -21034,8 +18327,6 @@ }, "compression": { "version": "1.7.4", - "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz", - "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==", "dev": true, "requires": { "accepts": "~1.3.5", @@ -21047,10 +18338,12 @@ "vary": "~1.1.2" }, "dependencies": { + "bytes": { + "version": "3.0.0", + "dev": true + }, "debug": { "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dev": true, "requires": { "ms": "2.0.0" @@ -21058,28 +18351,16 @@ }, "ms": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", "dev": true } } }, "concat-map": { "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", "dev": true }, "concat-stream": { "version": "1.6.2", - "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", - "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", "dev": true, "requires": { "buffer-from": "^1.0.0", @@ -21090,14 +18371,10 @@ "dependencies": { "isarray": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", "dev": true }, "readable-stream": { "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", "dev": true, "requires": { "core-util-is": "~1.0.0", @@ -21109,16 +18386,8 @@ "util-deprecate": "~1.0.1" } }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, "string_decoder": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "dev": true, "requires": { "safe-buffer": "~5.1.0" @@ -21128,84 +18397,55 @@ }, "connect-history-api-fallback": { "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==", "dev": true }, "console-browserify": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.2.0.tgz", - "integrity": "sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA==", "dev": true }, "console-control-strings": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", - "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=", "dev": true }, "constants-browserify": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz", - "integrity": "sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U=", "dev": true }, "content-disposition": { "version": "0.5.3", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz", - "integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==", "dev": true, "requires": { "safe-buffer": "5.1.2" - }, - "dependencies": { - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - } } }, "content-type": { "version": "1.0.4", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", - "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==", "dev": true }, "convert-source-map": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.7.0.tgz", - "integrity": "sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA==", + "version": "1.8.0", "dev": true, "requires": { "safe-buffer": "~5.1.1" - }, - "dependencies": { - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - } } }, "cookie": { "version": "0.4.0", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz", - "integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg==", "dev": true }, "cookie-signature": { "version": "1.0.6", - "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", - "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=", "dev": true }, + "copy-anything": { + "version": "2.0.3", + "dev": true, + "requires": { + "is-what": "^3.12.0" + } + }, "copy-concurrently": { "version": "1.0.5", - "resolved": "https://registry.npmjs.org/copy-concurrently/-/copy-concurrently-1.0.5.tgz", - "integrity": "sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A==", "dev": true, "requires": { "aproba": "^1.1.1", @@ -21216,10 +18456,15 @@ "run-queue": "^1.0.0" }, "dependencies": { + "mkdirp": { + "version": "0.5.5", + "dev": true, + "requires": { + "minimist": "^1.2.5" + } + }, "rimraf": { "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", "dev": true, "requires": { "glob": "^7.1.3" @@ -21229,14 +18474,10 @@ }, "copy-descriptor": { "version": "0.1.1", - "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", - "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=", "dev": true }, "copy-webpack-plugin": { - "version": "6.4.1", - "resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-6.4.1.tgz", - "integrity": "sha512-MXyPCjdPVx5iiWyl40Va3JGh27bKzOTNY3NjUTrosD2q7dR/cLD0013uqJ3BpFbUjyONINjb6qI7nDIJujrMbA==", + "version": "6.3.2", "dev": true, "requires": { "cacache": "^15.0.5", @@ -21252,92 +18493,78 @@ "webpack-sources": "^1.4.3" }, "dependencies": { - "p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dev": true, - "requires": { - "yocto-queue": "^0.1.0" - } - }, "schema-utils": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.0.0.tgz", - "integrity": "sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA==", + "version": "3.1.0", "dev": true, "requires": { - "@types/json-schema": "^7.0.6", + "@types/json-schema": "^7.0.7", "ajv": "^6.12.5", "ajv-keywords": "^3.5.2" } }, - "serialize-javascript": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-5.0.1.tgz", - "integrity": "sha512-SaaNal9imEO737H2c05Og0/8LUXG7EnsZyMa8MzkmuHoELfT6txuj0cMqRj6zfPKnmQ1yasR4PCJc8x+M4JSPA==", + "source-map": { + "version": "0.6.1", + "dev": true + }, + "webpack-sources": { + "version": "1.4.3", "dev": true, "requires": { - "randombytes": "^2.1.0" + "source-list-map": "^2.0.0", + "source-map": "~0.6.1" } } } }, "core-js": { - "version": "3.8.0", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.8.0.tgz", - "integrity": "sha512-W2VYNB0nwQQE7tKS7HzXd7r2y/y2SVJl4ga6oH/dnaLFzM0o2lB2P3zCkWj5Wc/zyMYjtgd5Hmhk0ObkQFZOIA==" + "version": "3.15.2" }, "core-js-compat": { - "version": "3.8.0", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.8.0.tgz", - "integrity": "sha512-o9QKelQSxQMYWHXc/Gc4L8bx/4F7TTraE5rhuN8I7mKBt5dBIUpXpIR3omv70ebr8ST5R3PqbDQr+ZI3+Tt1FQ==", + "version": "3.15.2", "dev": true, "requires": { - "browserslist": "^4.14.7", + "browserslist": "^4.16.6", "semver": "7.0.0" }, "dependencies": { "semver": { "version": "7.0.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz", - "integrity": "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==", "dev": true } } }, "core-util-is": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", "dev": true }, "cosmiconfig": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-5.2.1.tgz", - "integrity": "sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA==", + "version": "7.0.0", "dev": true, "requires": { - "import-fresh": "^2.0.0", - "is-directory": "^0.3.1", - "js-yaml": "^3.13.1", - "parse-json": "^4.0.0" + "@types/parse-json": "^4.0.0", + "import-fresh": "^3.2.1", + "parse-json": "^5.0.0", + "path-type": "^4.0.0", + "yaml": "^1.10.0" } }, "create-ecdh": { "version": "4.0.4", - "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.4.tgz", - "integrity": "sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A==", "dev": true, "requires": { "bn.js": "^4.1.0", "elliptic": "^6.5.3" + }, + "dependencies": { + "bn.js": { + "version": "4.12.0", + "dev": true + } } }, "create-hash": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", - "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", + "dev": true, "requires": { "cipher-base": "^1.0.1", "inherits": "^2.0.1", @@ -21348,8 +18575,7 @@ }, "create-hmac": { "version": "1.1.7", - "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", - "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", + "dev": true, "requires": { "cipher-base": "^1.0.3", "create-hash": "^1.1.0", @@ -21361,35 +18587,73 @@ }, "create-require": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", - "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", "dev": true }, - "cross-spawn": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", - "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "critters": { + "version": "0.0.7", "dev": true, "requires": { - "nice-try": "^1.0.4", - "path-key": "^2.0.1", - "semver": "^5.5.0", - "shebang-command": "^1.2.0", - "which": "^1.2.9" + "chalk": "^4.1.0", + "css": "^3.0.0", + "parse5": "^6.0.1", + "parse5-htmlparser2-tree-adapter": "^6.0.1", + "pretty-bytes": "^5.3.0" }, "dependencies": { - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "ansi-styles": { + "version": "4.3.0", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.1", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", "dev": true + }, + "has-flag": { + "version": "4.0.0", + "dev": true + }, + "parse5": { + "version": "6.0.1", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } } } }, + "cross-spawn": { + "version": "7.0.3", + "dev": true, + "requires": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + } + }, "crypto-browserify": { "version": "3.12.0", - "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz", - "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==", "dev": true, "requires": { "browserify-cipher": "^1.0.0", @@ -21406,234 +18670,188 @@ } }, "css": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/css/-/css-2.2.4.tgz", - "integrity": "sha512-oUnjmWpy0niI3x/mPL8dVEI1l7MnG3+HHyRPHf+YFSbK+svOhXpmSOcDURUh2aOCgl2grzrOPt1nHLuCVFULLw==", + "version": "3.0.0", "dev": true, "requires": { - "inherits": "^2.0.3", + "inherits": "^2.0.4", "source-map": "^0.6.1", - "source-map-resolve": "^0.5.2", - "urix": "^0.1.0" + "source-map-resolve": "^0.6.0" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "dev": true + } } }, "css-color-names": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/css-color-names/-/css-color-names-0.0.4.tgz", - "integrity": "sha1-gIrcLnnPhHOAabZGyyDsJ762KeA=", + "version": "1.0.1", "dev": true }, "css-declaration-sorter": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-4.0.1.tgz", - "integrity": "sha512-BcxQSKTSEEQUftYpBVnsH4SF05NTuBokb19/sBt6asXGKZ/6VP7PLG1CBCkFDYOnhXhPh0jMhO6xZ71oYHXHBA==", + "version": "6.0.3", "dev": true, "requires": { - "postcss": "^7.0.1", "timsort": "^0.3.0" } }, "css-loader": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-4.3.0.tgz", - "integrity": "sha512-rdezjCjScIrsL8BSYszgT4s476IcNKt6yX69t0pHjJVnPUTDpn4WfIpDQTN3wCJvUvfsz/mFjuGOekf3PY3NUg==", + "version": "5.0.1", "dev": true, "requires": { - "camelcase": "^6.0.0", + "camelcase": "^6.2.0", "cssesc": "^3.0.0", - "icss-utils": "^4.1.1", + "icss-utils": "^5.0.0", "loader-utils": "^2.0.0", - "postcss": "^7.0.32", - "postcss-modules-extract-imports": "^2.0.0", - "postcss-modules-local-by-default": "^3.0.3", - "postcss-modules-scope": "^2.2.0", - "postcss-modules-values": "^3.0.0", + "postcss": "^8.1.4", + "postcss-modules-extract-imports": "^3.0.0", + "postcss-modules-local-by-default": "^4.0.0", + "postcss-modules-scope": "^3.0.0", + "postcss-modules-values": "^4.0.0", "postcss-value-parser": "^4.1.0", - "schema-utils": "^2.7.1", + "schema-utils": "^3.0.0", "semver": "^7.3.2" }, "dependencies": { - "camelcase": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.2.0.tgz", - "integrity": "sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg==", - "dev": true + "schema-utils": { + "version": "3.1.0", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.7", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + } } } }, "css-parse": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/css-parse/-/css-parse-2.0.0.tgz", - "integrity": "sha1-pGjuZnwW2BzPBcWMONKpfHgNv9Q=", "dev": true, "requires": { "css": "^2.0.0" + }, + "dependencies": { + "css": { + "version": "2.2.4", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "source-map": "^0.6.1", + "source-map-resolve": "^0.5.2", + "urix": "^0.1.0" + } + }, + "source-map": { + "version": "0.6.1", + "dev": true + }, + "source-map-resolve": { + "version": "0.5.3", + "dev": true, + "requires": { + "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" + } + } } }, "css-select": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-2.1.0.tgz", - "integrity": "sha512-Dqk7LQKpwLoH3VovzZnkzegqNSuAziQyNZUcrdDM401iY+R5NkGBXGmtO05/yaXQziALuPogeG0b7UAgjnTJTQ==", + "version": "1.2.0", "dev": true, "requires": { - "boolbase": "^1.0.0", - "css-what": "^3.2.1", - "domutils": "^1.7.0", - "nth-check": "^1.0.2" + "boolbase": "~1.0.0", + "css-what": "2.1", + "domutils": "1.5.1", + "nth-check": "~1.0.1" } }, - "css-select-base-adapter": { - "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==", - "dev": true - }, "css-tree": { - "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==", + "version": "1.1.3", "dev": true, "requires": { - "mdn-data": "2.0.4", + "mdn-data": "2.0.14", "source-map": "^0.6.1" - } - }, - "css-what": { - "version": "3.4.2", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-3.4.2.tgz", - "integrity": "sha512-ACUm3L0/jiZTqfzRM3Hi9Q8eZqd6IK37mMWPLz9PJxkLWllYeRf+EHUSHYEtFop2Eqytaq1FizFVh7XfBnXCDQ==", - "dev": true - }, - "cssesc": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", - "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", - "dev": true - }, - "cssnano": { - "version": "4.1.10", - "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-4.1.10.tgz", - "integrity": "sha512-5wny+F6H4/8RgNlaqab4ktc3e0/blKutmq8yNlBFXA//nSFFAqAngjNVRzUvCgYROULmZZUoosL/KSoZo5aUaQ==", - "dev": true, - "requires": { - "cosmiconfig": "^5.0.0", - "cssnano-preset-default": "^4.0.7", - "is-resolvable": "^1.0.0", - "postcss": "^7.0.0" - } - }, - "cssnano-preset-default": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-4.0.7.tgz", - "integrity": "sha512-x0YHHx2h6p0fCl1zY9L9roD7rnlltugGu7zXSKQx6k2rYw0Hi3IqxcoAGF7u9Q5w1nt7vK0ulxV8Lo+EvllGsA==", - "dev": true, - "requires": { - "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.2", - "postcss-unique-selectors": "^4.0.1" - } - }, - "cssnano-util-get-arguments": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/cssnano-util-get-arguments/-/cssnano-util-get-arguments-4.0.0.tgz", - "integrity": "sha1-7ToIKZ8h11dBsg87gfGU7UnMFQ8=", - "dev": true - }, - "cssnano-util-get-match": { - "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=", - "dev": true - }, - "cssnano-util-raw-cache": { - "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==", - "dev": true, - "requires": { - "postcss": "^7.0.0" - } - }, - "cssnano-util-same-parent": { - "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==", - "dev": true - }, - "csso": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/csso/-/csso-4.2.0.tgz", - "integrity": "sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA==", - "dev": true, - "requires": { - "css-tree": "^1.1.2" }, "dependencies": { - "css-tree": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.1.2.tgz", - "integrity": "sha512-wCoWush5Aeo48GLhfHPbmvZs59Z+M7k5+B1xDnXbdWNcEF423DoFdqSWE0PM5aNk5nI5cp1q7ms36zGApY/sKQ==", - "dev": true, - "requires": { - "mdn-data": "2.0.14", - "source-map": "^0.6.1" - } - }, - "mdn-data": { - "version": "2.0.14", - "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz", - "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==", + "source-map": { + "version": "0.6.1", "dev": true } } }, - "cyclist": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/cyclist/-/cyclist-1.0.1.tgz", - "integrity": "sha1-WW6WmP0MgOEgOMK4LW6xs1tiJNk=", + "css-what": { + "version": "2.1.3", "dev": true }, - "d": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz", - "integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==", + "cssesc": { + "version": "3.0.0", + "dev": true + }, + "cssnano": { + "version": "5.0.2", "dev": true, "requires": { - "es5-ext": "^0.10.50", - "type": "^1.0.1" + "cosmiconfig": "^7.0.0", + "cssnano-preset-default": "^5.0.1", + "is-resolvable": "^1.1.0" } }, + "cssnano-preset-default": { + "version": "5.1.3", + "dev": true, + "requires": { + "css-declaration-sorter": "^6.0.3", + "cssnano-utils": "^2.0.1", + "postcss-calc": "^8.0.0", + "postcss-colormin": "^5.2.0", + "postcss-convert-values": "^5.0.1", + "postcss-discard-comments": "^5.0.1", + "postcss-discard-duplicates": "^5.0.1", + "postcss-discard-empty": "^5.0.1", + "postcss-discard-overridden": "^5.0.1", + "postcss-merge-longhand": "^5.0.2", + "postcss-merge-rules": "^5.0.2", + "postcss-minify-font-values": "^5.0.1", + "postcss-minify-gradients": "^5.0.1", + "postcss-minify-params": "^5.0.1", + "postcss-minify-selectors": "^5.1.0", + "postcss-normalize-charset": "^5.0.1", + "postcss-normalize-display-values": "^5.0.1", + "postcss-normalize-positions": "^5.0.1", + "postcss-normalize-repeat-style": "^5.0.1", + "postcss-normalize-string": "^5.0.1", + "postcss-normalize-timing-functions": "^5.0.1", + "postcss-normalize-unicode": "^5.0.1", + "postcss-normalize-url": "^5.0.2", + "postcss-normalize-whitespace": "^5.0.1", + "postcss-ordered-values": "^5.0.2", + "postcss-reduce-initial": "^5.0.1", + "postcss-reduce-transforms": "^5.0.1", + "postcss-svgo": "^5.0.2", + "postcss-unique-selectors": "^5.0.1" + } + }, + "cssnano-utils": { + "version": "2.0.1", + "dev": true, + "requires": {} + }, + "csso": { + "version": "4.2.0", + "dev": true, + "requires": { + "css-tree": "^1.1.2" + } + }, + "cyclist": { + "version": "1.0.1", + "dev": true + }, "dashdash": { "version": "1.14.1", - "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", - "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", "dev": true, "requires": { "assert-plus": "^1.0.0" @@ -21641,28 +18859,20 @@ }, "debug": { "version": "4.3.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", - "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", "dev": true, "requires": { "ms": "2.1.2" } }, "decamelize": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=" + "version": "1.2.0" }, "decode-uri-component": { "version": "0.2.0", - "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", - "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", "dev": true }, "deep-equal": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.1.1.tgz", - "integrity": "sha512-yd9c5AdiqVcR+JjcwUQb9DkhJc8ngNr0MahEBGvDiJw8puWab2yZlh+nkasOnZP+EGTAP6rRp2JzJhJZzvNF8g==", "dev": true, "requires": { "is-arguments": "^1.0.4", @@ -21675,8 +18885,6 @@ }, "default-gateway": { "version": "4.2.0", - "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-4.2.0.tgz", - "integrity": "sha512-h6sMrVB1VMWVrW13mSc6ia/DwYYw5MN6+exNu1OaJeFac5aSAvwM7lZ0NVfTABuSkQelr4h5oebg3KB1XPdjgA==", "dev": true, "requires": { "execa": "^1.0.0", @@ -21685,25 +18893,13 @@ }, "defaults": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz", - "integrity": "sha1-xlYFHpgX2f8I7YgUd/P+QBnz730=", "dev": true, "requires": { "clone": "^1.0.2" - }, - "dependencies": { - "clone": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", - "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4=", - "dev": true - } } }, "define-properties": { "version": "1.1.3", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", - "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", "dev": true, "requires": { "object-keys": "^1.0.12" @@ -21711,49 +18907,14 @@ }, "define-property": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", - "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", "dev": true, "requires": { "is-descriptor": "^1.0.2", "isobject": "^3.0.1" - }, - "dependencies": { - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - } } }, "del": { "version": "4.1.1", - "resolved": "https://registry.npmjs.org/del/-/del-4.1.1.tgz", - "integrity": "sha512-QwGuEUouP2kVwQenAsOof5Fv8K9t3D8Ca8NxcXKrIpEHjTXK5J2nXLdP+ALI1cgv8wj7KuwBhTwBkOZSJKM5XQ==", "dev": true, "requires": { "@types/glob": "^7.1.1", @@ -21767,8 +18928,6 @@ "dependencies": { "array-union": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", - "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=", "dev": true, "requires": { "array-uniq": "^1.0.1" @@ -21776,8 +18935,6 @@ }, "globby": { "version": "6.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz", - "integrity": "sha1-9abXDoOV4hyFj7BInWTfAkJNUGw=", "dev": true, "requires": { "array-union": "^1.0.1", @@ -21789,22 +18946,20 @@ "dependencies": { "pify": { "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", "dev": true } } }, "p-map": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-2.1.0.tgz", - "integrity": "sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==", + "dev": true + }, + "pify": { + "version": "4.0.1", "dev": true }, "rimraf": { "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", "dev": true, "requires": { "glob": "^7.1.3" @@ -21814,32 +18969,22 @@ }, "delayed-stream": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", "dev": true }, "delegates": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", - "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=", "dev": true }, "depd": { "version": "1.1.2", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", "dev": true }, "dependency-graph": { "version": "0.7.2", - "resolved": "https://registry.npmjs.org/dependency-graph/-/dependency-graph-0.7.2.tgz", - "integrity": "sha512-KqtH4/EZdtdfWX0p6MGP9jljvxSY6msy/pRUD4jgNwVpv3v1QmNLlsB3LDSSUg79BRVSn7jI1QPRtArGABovAQ==", "dev": true }, "des.js": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.1.tgz", - "integrity": "sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA==", "dev": true, "requires": { "inherits": "^2.0.1", @@ -21848,42 +18993,36 @@ }, "destroy": { "version": "1.0.4", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", - "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=", "dev": true }, "detect-node": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.0.4.tgz", - "integrity": "sha512-ZIzRpLJrOj7jjP2miAtgqIfmzbxa4ZOr5jJc601zklsfEx9oTzmmj2nVpIPRpNlRTIh8lc1kyViIY7BWSGNmKw==", + "version": "2.1.0", "dev": true }, "diff": { "version": "4.0.2", - "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", - "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", "dev": true }, "diffie-hellman": { "version": "5.0.3", - "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", - "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==", "dev": true, "requires": { "bn.js": "^4.1.0", "miller-rabin": "^4.0.0", "randombytes": "^2.0.0" + }, + "dependencies": { + "bn.js": { + "version": "4.12.0", + "dev": true + } } }, "dijkstrajs": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/dijkstrajs/-/dijkstrajs-1.0.1.tgz", - "integrity": "sha1-082BIh4+pAdCz83lVtTpnpjdxxs=" + "version": "1.0.2" }, "dir-glob": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", "dev": true, "requires": { "path-type": "^4.0.0" @@ -21891,14 +19030,10 @@ }, "dns-equal": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/dns-equal/-/dns-equal-1.0.0.tgz", - "integrity": "sha1-s55/HabrCnW6nBcySzR1PEfgZU0=", "dev": true }, "dns-packet": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-1.3.1.tgz", - "integrity": "sha512-0UxfQkMhYAUaZI+xrNZOz/as5KgDU0M/fQ9b6SpkyLbk3GEswDi6PADJVaYJradtRVsRIlF1zLyOodbcTCDzUg==", + "version": "1.3.4", "dev": true, "requires": { "ip": "^1.1.0", @@ -21907,75 +19042,44 @@ }, "dns-txt": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/dns-txt/-/dns-txt-2.0.2.tgz", - "integrity": "sha1-uR2Ab10nGI5Ks+fRB9iBocxGQrY=", "dev": true, "requires": { "buffer-indexof": "^1.0.0" } }, "dom-serializer": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.2.2.tgz", - "integrity": "sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g==", + "version": "0.1.1", "dev": true, "requires": { - "domelementtype": "^2.0.1", - "entities": "^2.0.0" - }, - "dependencies": { - "domelementtype": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.0.2.tgz", - "integrity": "sha512-wFwTwCVebUrMgGeAwRL/NhZtHAUyT9n9yg4IMDwf10+6iCMxSkVq9MGCVEH+QZWo1nNidy8kNvwmv4zWHDTqvA==", - "dev": true - } + "domelementtype": "^1.3.0", + "entities": "^1.1.1" } }, "domain-browser": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz", - "integrity": "sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==", "dev": true }, "domelementtype": { "version": "1.3.1", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz", - "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==", "dev": true }, "domhandler": { "version": "2.4.2", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.4.2.tgz", - "integrity": "sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA==", "dev": true, "requires": { "domelementtype": "1" } }, "domutils": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.7.0.tgz", - "integrity": "sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==", + "version": "1.5.1", "dev": true, "requires": { "dom-serializer": "0", "domelementtype": "1" } }, - "dot-prop": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz", - "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==", - "dev": true, - "requires": { - "is-obj": "^2.0.0" - } - }, "duplexify": { "version": "3.7.1", - "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.7.1.tgz", - "integrity": "sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==", "dev": true, "requires": { "end-of-stream": "^1.0.0", @@ -21986,14 +19090,10 @@ "dependencies": { "isarray": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", "dev": true }, "readable-stream": { "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", "dev": true, "requires": { "core-util-is": "~1.0.0", @@ -22005,16 +19105,8 @@ "util-deprecate": "~1.0.1" } }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, "string_decoder": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "dev": true, "requires": { "safe-buffer": "~5.1.0" @@ -22024,38 +19116,23 @@ }, "ecc-jsbn": { "version": "0.1.2", - "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", - "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", "dev": true, "requires": { "jsbn": "~0.1.0", "safer-buffer": "^2.1.0" } }, - "ecdsa-sig-formatter": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", - "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==", - "requires": { - "safe-buffer": "^5.0.1" - } - }, "ee-first": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=", "dev": true }, "electron-to-chromium": { - "version": "1.3.614", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.614.tgz", - "integrity": "sha512-JMDl46mg4G+n6q/hAJkwy9eMTj5FJjsE+8f/irAGRMLM4yeRVbMuRrdZrbbGGOrGVcZc4vJPjUpEUWNb/fA6hg==", + "version": "1.3.774", "dev": true }, "elliptic": { "version": "6.5.4", - "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz", - "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==", + "dev": true, "requires": { "bn.js": "^4.11.9", "brorand": "^1.1.0", @@ -22064,29 +19141,28 @@ "inherits": "^2.0.4", "minimalistic-assert": "^1.0.1", "minimalistic-crypto-utils": "^1.0.1" + }, + "dependencies": { + "bn.js": { + "version": "4.12.0", + "dev": true + } } }, "emoji-regex": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", - "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==" + "version": "8.0.0", + "dev": true }, "emojis-list": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", - "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", "dev": true }, "encodeurl": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=", "dev": true }, "encoding": { "version": "0.1.13", - "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz", - "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==", "dev": true, "optional": true, "requires": { @@ -22094,9 +19170,7 @@ }, "dependencies": { "iconv-lite": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.2.tgz", - "integrity": "sha512-2y91h5OpQlolefMPmUlivelittSWy0rP+oYVpn6A7GwVHNE8AWzoYOBNmlwks3LobaJxgHCYZAnyNo2GgpNRNQ==", + "version": "0.6.3", "dev": true, "optional": true, "requires": { @@ -22107,45 +19181,33 @@ }, "end-of-stream": { "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==", "dev": true, "requires": { "once": "^1.4.0" } }, "enhanced-resolve": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.3.1.tgz", - "integrity": "sha512-G1XD3MRGrGfNcf6Hg0LVZG7GIKcYkbfHa5QMxt1HDUTdYoXH0JR1xXyg+MaKLF73E9A27uWNVxvFivNRYeUB6w==", + "version": "5.7.0", "dev": true, "requires": { "graceful-fs": "^4.2.4", - "tapable": "^2.0.0" + "tapable": "^2.2.0" } }, "entities": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-2.1.0.tgz", - "integrity": "sha512-hCx1oky9PFrJ611mf0ifBLBRW8lUUVRlFolb5gWRfIELabBlbp9xZvrqZLZAs+NxFnbfQoeGd8wDkygjg7U85w==", + "version": "1.1.2", "dev": true }, "env-paths": { "version": "2.2.1", - "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", - "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", "dev": true }, "err-code": { "version": "1.1.2", - "resolved": "https://registry.npmjs.org/err-code/-/err-code-1.1.2.tgz", - "integrity": "sha1-BuARbTAo9q70gGhJ6w6mp0iuaWA=", "dev": true }, "errno": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.7.tgz", - "integrity": "sha512-MfrRBDWzIWifgq6tJj60gkAwtLNb6sQPlcFrSOflcP1aFmmruKQ2wRnze/8V6kgyz7H3FF8Npzv78mZ7XLLflg==", + "version": "0.1.8", "dev": true, "requires": { "prr": "~1.0.1" @@ -22153,98 +19215,25 @@ }, "error-ex": { "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", "dev": true, "requires": { "is-arrayish": "^0.2.1" } }, - "es-abstract": { - "version": "1.18.0-next.1", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.0-next.1.tgz", - "integrity": "sha512-I4UGspA0wpZXWENrdA0uHbnhte683t3qT/1VFH9aX2dA5PPSf6QW5HHXf5HImaqPmjXaVeVk4RGWnaylmV7uAA==", - "dev": true, - "requires": { - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.1", - "is-callable": "^1.2.2", - "is-negative-zero": "^2.0.0", - "is-regex": "^1.1.1", - "object-inspect": "^1.8.0", - "object-keys": "^1.1.1", - "object.assign": "^4.1.1", - "string.prototype.trimend": "^1.0.1", - "string.prototype.trimstart": "^1.0.1" - } - }, - "es-to-primitive": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", - "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", - "dev": true, - "requires": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" - } - }, - "es5-ext": { - "version": "0.10.53", - "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.53.tgz", - "integrity": "sha512-Xs2Stw6NiNHWypzRTY1MtaG/uJlwCk8kH81920ma8mvN8Xq1gsfhZvpkImLQArw8AHnv8MT2I45J3c0R8slE+Q==", - "dev": true, - "requires": { - "es6-iterator": "~2.0.3", - "es6-symbol": "~3.1.3", - "next-tick": "~1.0.0" - } - }, - "es6-iterator": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", - "integrity": "sha1-p96IkUGgWpSwhUQDstCg+/qY87c=", - "dev": true, - "requires": { - "d": "1", - "es5-ext": "^0.10.35", - "es6-symbol": "^3.1.1" - } - }, - "es6-symbol": { - "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==", - "dev": true, - "requires": { - "d": "^1.0.1", - "ext": "^1.1.2" - } - }, "escalade": { "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", "dev": true }, "escape-html": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=", "dev": true }, "escape-string-regexp": { "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", "dev": true }, "eslint-scope": { "version": "4.0.3", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.3.tgz", - "integrity": "sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg==", "dev": true, "requires": { "esrecurse": "^4.1.0", @@ -22253,14 +19242,10 @@ }, "esprima": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", "dev": true }, "esrecurse": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", "dev": true, "requires": { "estraverse": "^5.2.0" @@ -22268,46 +19253,32 @@ "dependencies": { "estraverse": { "version": "5.2.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", - "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", "dev": true } } }, "estraverse": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", "dev": true }, "esutils": { "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", "dev": true }, "etag": { "version": "1.8.1", - "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=", "dev": true }, "eventemitter3": { "version": "4.0.7", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", - "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", "dev": true }, "events": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/events/-/events-3.2.0.tgz", - "integrity": "sha512-/46HWwbfCX2xTawVfkKLGxMifJYQBWMwY1mjywRtb4c9x8l5NP3KoJtnIOiL1hfdRkIuYhETxQlo62IF8tcnlg==", + "version": "3.3.0", "dev": true }, "eventsource": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/eventsource/-/eventsource-1.0.7.tgz", - "integrity": "sha512-4Ln17+vVT0k8aWq+t/bF5arcS3EpT9gYtW66EPacdj/mAFevznsnyoHLPy2BA8gbIQeIHoPsvwmfBftfcG//BQ==", + "version": "1.1.0", "dev": true, "requires": { "original": "^1.0.0" @@ -22315,8 +19286,6 @@ }, "evp_bytestokey": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", - "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", "dev": true, "requires": { "md5.js": "^1.3.4", @@ -22325,8 +19294,6 @@ }, "execa": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", - "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", "dev": true, "requires": { "cross-spawn": "^6.0.0", @@ -22336,12 +19303,49 @@ "p-finally": "^1.0.0", "signal-exit": "^3.0.0", "strip-eof": "^1.0.0" + }, + "dependencies": { + "cross-spawn": { + "version": "6.0.5", + "dev": true, + "requires": { + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + } + }, + "path-key": { + "version": "2.0.1", + "dev": true + }, + "semver": { + "version": "5.7.1", + "dev": true + }, + "shebang-command": { + "version": "1.2.0", + "dev": true, + "requires": { + "shebang-regex": "^1.0.0" + } + }, + "shebang-regex": { + "version": "1.0.0", + "dev": true + }, + "which": { + "version": "1.3.1", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + } } }, "expand-brackets": { "version": "2.1.4", - "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", - "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", "dev": true, "requires": { "debug": "^2.3.3", @@ -22355,8 +19359,6 @@ "dependencies": { "debug": { "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dev": true, "requires": { "ms": "2.0.0" @@ -22364,8 +19366,6 @@ }, "define-property": { "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", "dev": true, "requires": { "is-descriptor": "^0.1.0" @@ -22373,25 +19373,68 @@ }, "extend-shallow": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, "requires": { "is-extendable": "^0.1.0" } }, + "is-accessor-descriptor": { + "version": "0.1.6", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-data-descriptor": { + "version": "0.1.4", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-descriptor": { + "version": "0.1.6", + "dev": true, + "requires": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + } + }, + "is-extendable": { + "version": "0.1.1", + "dev": true + }, + "kind-of": { + "version": "5.1.0", + "dev": true + }, "ms": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", "dev": true } } }, "express": { "version": "4.17.1", - "resolved": "https://registry.npmjs.org/express/-/express-4.17.1.tgz", - "integrity": "sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==", "dev": true, "requires": { "accepts": "~1.3.7", @@ -22426,16 +19469,8 @@ "vary": "~1.1.2" }, "dependencies": { - "array-flatten": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", - "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=", - "dev": true - }, "debug": { "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dev": true, "requires": { "ms": "2.0.0" @@ -22443,66 +19478,24 @@ }, "ms": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - } - } - }, - "ext": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/ext/-/ext-1.4.0.tgz", - "integrity": "sha512-Key5NIsUxdqKg3vIsdw9dSuXpPCQ297y6wBjL30edxwPgt2E44WcWBZey/ZvUc6sERLTxKdyCu4gZFmUbk1Q7A==", - "dev": true, - "requires": { - "type": "^2.0.0" - }, - "dependencies": { - "type": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/type/-/type-2.1.0.tgz", - "integrity": "sha512-G9absDWvhAWCV2gmF1zKud3OyC61nZDwWvBL2DApaVFogI07CprggiQAOOjvp2NRjYWFzPyu7vwtDrQFq8jeSA==", "dev": true } } }, "extend": { "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", "dev": true }, "extend-shallow": { "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", "dev": true, "requires": { "assign-symbols": "^1.0.0", "is-extendable": "^1.0.1" - }, - "dependencies": { - "is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "requires": { - "is-plain-object": "^2.0.4" - } - } } }, "external-editor": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", - "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", "dev": true, "requires": { "chardet": "^0.7.0", @@ -22512,8 +19505,6 @@ }, "extglob": { "version": "2.0.4", - "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", - "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", "dev": true, "requires": { "array-unique": "^0.3.2", @@ -22528,8 +19519,6 @@ "dependencies": { "define-property": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", "dev": true, "requires": { "is-descriptor": "^1.0.0" @@ -22537,87 +19526,47 @@ }, "extend-shallow": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, "requires": { "is-extendable": "^0.1.0" } }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } + "is-extendable": { + "version": "0.1.1", + "dev": true } } }, "extsprintf": { "version": "1.3.0", - "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", - "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=", "dev": true }, "fast-deep-equal": { - "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==" + "version": "3.1.3" }, "fast-glob": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.4.tgz", - "integrity": "sha512-kr/Oo6PX51265qeuCYsyGypiO5uJFgBS0jksyG7FUeCyQzNwYnzrNIMR1NXfkZXsMYXYLRAHgISHBz8gQcxKHQ==", + "version": "3.2.7", "dev": true, "requires": { "@nodelib/fs.stat": "^2.0.2", "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.0", + "glob-parent": "^5.1.2", "merge2": "^1.3.0", - "micromatch": "^4.0.2", - "picomatch": "^2.2.1" + "micromatch": "^4.0.4" } }, "fast-json-stable-stringify": { - "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==" + "version": "2.1.0" }, "fastq": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.9.0.tgz", - "integrity": "sha512-i7FVWL8HhVY+CTkwFxkN2mk3h+787ixS5S63eb78diVRc1MCssarHq3W5cj0av7YDSwmaV928RNag+U1etRQ7w==", + "version": "1.11.1", "dev": true, "requires": { "reusify": "^1.0.4" } }, "faye-websocket": { - "version": "0.10.0", - "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.10.0.tgz", - "integrity": "sha1-TkkvjQTftviQA1B/btvy1QHnxvQ=", + "version": "0.11.4", "dev": true, "requires": { "websocket-driver": ">=0.5.1" @@ -22625,23 +19574,17 @@ }, "figgy-pudding": { "version": "3.5.2", - "resolved": "https://registry.npmjs.org/figgy-pudding/-/figgy-pudding-3.5.2.tgz", - "integrity": "sha512-0btnI/H8f2pavGMN8w40mlSKOfTK2SVJmBfBeVIj3kNw0swwgzyRq0d5TJVOwodFmtvpPeWPN/MCcfuWF0Ezbw==", "dev": true }, "figures": { "version": "3.2.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", - "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", "dev": true, "requires": { "escape-string-regexp": "^1.0.5" } }, "file-loader": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/file-loader/-/file-loader-6.1.1.tgz", - "integrity": "sha512-Klt8C4BjWSXYQAfhpYYkG4qHNTna4toMHEbWrI5IuVoxbU6uiDKeKAP99R8mmbJi3lvewn/jQBOgU4+NS3tDQw==", + "version": "6.2.0", "dev": true, "requires": { "loader-utils": "^2.0.0", @@ -22649,27 +19592,18 @@ }, "dependencies": { "schema-utils": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.0.0.tgz", - "integrity": "sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA==", + "version": "3.1.0", "dev": true, "requires": { - "@types/json-schema": "^7.0.6", + "@types/json-schema": "^7.0.7", "ajv": "^6.12.5", "ajv-keywords": "^3.5.2" } } } }, - "file-uri-to-path": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", - "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==" - }, "fill-range": { "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", "dev": true, "requires": { "to-regex-range": "^5.0.1" @@ -22677,8 +19611,6 @@ }, "finalhandler": { "version": "1.1.2", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", - "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", "dev": true, "requires": { "debug": "2.6.9", @@ -22692,8 +19624,6 @@ "dependencies": { "debug": { "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dev": true, "requires": { "ms": "2.0.0" @@ -22701,95 +19631,29 @@ }, "ms": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", "dev": true } } }, "find-cache-dir": { "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==", "dev": true, "requires": { "commondir": "^1.0.1", "make-dir": "^3.0.2", "pkg-dir": "^4.1.0" - }, - "dependencies": { - "find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "requires": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - } - }, - "locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "requires": { - "p-locate": "^4.1.0" - } - }, - "make-dir": { - "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==", - "dev": true, - "requires": { - "semver": "^6.0.0" - } - }, - "p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "requires": { - "p-limit": "^2.2.0" - } - }, - "path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true - }, - "pkg-dir": { - "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==", - "dev": true, - "requires": { - "find-up": "^4.0.0" - } - }, - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - } } }, "find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "version": "4.1.0", + "dev": true, "requires": { - "locate-path": "^3.0.0" + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" } }, "flush-write-stream": { "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==", "dev": true, "requires": { "inherits": "^2.0.3", @@ -22798,14 +19662,10 @@ "dependencies": { "isarray": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", "dev": true }, "readable-stream": { "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", "dev": true, "requires": { "core-util-is": "~1.0.0", @@ -22817,16 +19677,8 @@ "util-deprecate": "~1.0.1" } }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, "string_decoder": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "dev": true, "requires": { "safe-buffer": "~5.1.0" @@ -22835,32 +19687,22 @@ } }, "follow-redirects": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.13.0.tgz", - "integrity": "sha512-aq6gF1BEKje4a9i9+5jimNFIpq4Q1WiwBToeRK5NvZBd/TRsmW8BsJfOEGkr76TbOyPVD3OVDN910EcUNtRYEA==", + "version": "1.14.1", "dev": true }, "for-in": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", - "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", "dev": true }, "foreach": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/foreach/-/foreach-2.0.5.tgz", - "integrity": "sha1-C+4AUBiusmDQo6865ljdATbsG5k=" + "version": "2.0.5" }, "forever-agent": { "version": "0.6.1", - "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", - "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", "dev": true }, "form-data": { "version": "2.3.3", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", - "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", "dev": true, "requires": { "asynckit": "^0.4.0", @@ -22869,15 +19711,15 @@ } }, "forwarded": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz", - "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=", + "version": "0.2.0", + "dev": true + }, + "fraction.js": { + "version": "4.1.1", "dev": true }, "fragment-cache": { "version": "0.2.1", - "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", - "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", "dev": true, "requires": { "map-cache": "^0.2.2" @@ -22885,14 +19727,10 @@ }, "fresh": { "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=", "dev": true }, "from2": { "version": "2.3.0", - "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz", - "integrity": "sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8=", "dev": true, "requires": { "inherits": "^2.0.1", @@ -22901,14 +19739,10 @@ "dependencies": { "isarray": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", "dev": true }, "readable-stream": { "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", "dev": true, "requires": { "core-util-is": "~1.0.0", @@ -22920,16 +19754,8 @@ "util-deprecate": "~1.0.1" } }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, "string_decoder": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "dev": true, "requires": { "safe-buffer": "~5.1.0" @@ -22939,8 +19765,6 @@ }, "fs-extra": { "version": "4.0.2", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-4.0.2.tgz", - "integrity": "sha1-+RcExT0bRh+JNFKwwwfZmXZHq2s=", "dev": true, "requires": { "graceful-fs": "^4.1.2", @@ -22950,8 +19774,6 @@ }, "fs-minipass": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", - "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", "dev": true, "requires": { "minipass": "^3.0.0" @@ -22959,8 +19781,6 @@ }, "fs-write-stream-atomic": { "version": "1.0.10", - "resolved": "https://registry.npmjs.org/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz", - "integrity": "sha1-tH31NJPvkR33VzHnCp3tAYnbQMk=", "dev": true, "requires": { "graceful-fs": "^4.1.2", @@ -22971,14 +19791,10 @@ "dependencies": { "isarray": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", "dev": true }, "readable-stream": { "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", "dev": true, "requires": { "core-util-is": "~1.0.0", @@ -22990,16 +19806,8 @@ "util-deprecate": "~1.0.1" } }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, "string_decoder": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "dev": true, "requires": { "safe-buffer": "~5.1.0" @@ -23009,27 +19817,14 @@ }, "fs.realpath": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", "dev": true }, - "fsevents": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.1.3.tgz", - "integrity": "sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ==", - "dev": true, - "optional": true - }, "function-bind": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", "dev": true }, "gauge": { "version": "2.7.4", - "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", - "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=", "dev": true, "requires": { "aproba": "^1.0.3", @@ -23044,14 +19839,10 @@ "dependencies": { "ansi-regex": { "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", "dev": true }, "is-fullwidth-code-point": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", "dev": true, "requires": { "number-is-nan": "^1.0.0" @@ -23059,8 +19850,6 @@ }, "string-width": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", "dev": true, "requires": { "code-point-at": "^1.0.0", @@ -23070,8 +19859,6 @@ }, "strip-ansi": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", "dev": true, "requires": { "ansi-regex": "^2.0.0" @@ -23081,19 +19868,13 @@ }, "gensync": { "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==", "dev": true }, "get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==" + "version": "2.0.5" }, "get-intrinsic": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.0.1.tgz", - "integrity": "sha512-ZnWP+AmS1VUaLgTRy47+zKtjTxz+0xMpx3I52i+aalBK1QP19ggLF3Db89KJX7kjfOfP2eoa01qc++GwPgufPg==", + "version": "1.1.1", "dev": true, "requires": { "function-bind": "^1.1.1", @@ -23103,8 +19884,6 @@ }, "get-stream": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", - "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", "dev": true, "requires": { "pump": "^3.0.0" @@ -23112,14 +19891,10 @@ }, "get-value": { "version": "2.0.6", - "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", - "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=", "dev": true }, "getpass": { "version": "0.1.7", - "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", - "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", "dev": true, "requires": { "assert-plus": "^1.0.0" @@ -23127,8 +19902,6 @@ }, "glob": { "version": "7.1.6", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", - "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", "dev": true, "requires": { "fs.realpath": "^1.0.0", @@ -23140,9 +19913,7 @@ } }, "glob-parent": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.1.tgz", - "integrity": "sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ==", + "version": "5.1.2", "dev": true, "requires": { "is-glob": "^4.0.1" @@ -23150,14 +19921,10 @@ }, "globals": { "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", "dev": true }, "globby": { - "version": "11.0.1", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.1.tgz", - "integrity": "sha512-iH9RmgwCmUJHi2z5o2l3eTtGBtXek1OYlHrbcxOYugyHLmAsZrPj43OtHThd62Buh/Vv6VyCBD2bdyWcGNQqoQ==", + "version": "11.0.4", "dev": true, "requires": { "array-union": "^2.1.0", @@ -23169,39 +19936,34 @@ } }, "graceful-fs": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz", - "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==", + "version": "4.2.6", "dev": true }, "handle-thing": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.1.tgz", - "integrity": "sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==", "dev": true }, "handlebars": { - "version": "4.7.6", - "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.6.tgz", - "integrity": "sha512-1f2BACcBfiwAfStCKZNrUCgqNZkGsAT7UM3kkYtXuLo0KnaVfjKOyf7PRzB6++aK9STyT1Pd2ZCPe3EGOXleXA==", + "version": "4.7.7", "requires": { "minimist": "^1.2.5", "neo-async": "^2.6.0", "source-map": "^0.6.1", "uglify-js": "^3.1.4", "wordwrap": "^1.0.0" + }, + "dependencies": { + "source-map": { + "version": "0.6.1" + } } }, "har-schema": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", - "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=", "dev": true }, "har-validator": { "version": "5.1.5", - "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz", - "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==", "dev": true, "requires": { "ajv": "^6.12.3", @@ -23210,8 +19972,6 @@ }, "has": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", "dev": true, "requires": { "function-bind": "^1.1.1" @@ -23219,26 +19979,18 @@ }, "has-flag": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", "dev": true }, "has-symbols": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz", - "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==", + "version": "1.0.2", "dev": true }, "has-unicode": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", - "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=", "dev": true }, "has-value": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", - "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", "dev": true, "requires": { "get-value": "^2.0.6", @@ -23248,8 +20000,6 @@ }, "has-values": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", - "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", "dev": true, "requires": { "is-number": "^3.0.0", @@ -23258,8 +20008,6 @@ "dependencies": { "is-number": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", "dev": true, "requires": { "kind-of": "^3.0.2" @@ -23267,8 +20015,6 @@ "dependencies": { "kind-of": { "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, "requires": { "is-buffer": "^1.1.5" @@ -23278,8 +20024,6 @@ }, "kind-of": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", - "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", "dev": true, "requires": { "is-buffer": "^1.1.5" @@ -23289,18 +20033,22 @@ }, "hash-base": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz", - "integrity": "sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==", + "dev": true, "requires": { "inherits": "^2.0.4", "readable-stream": "^3.6.0", "safe-buffer": "^5.2.0" + }, + "dependencies": { + "safe-buffer": { + "version": "5.2.1", + "dev": true + } } }, "hash.js": { "version": "1.1.7", - "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", - "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", + "dev": true, "requires": { "inherits": "^2.0.3", "minimalistic-assert": "^1.0.1" @@ -23308,20 +20056,15 @@ }, "he": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", - "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", "dev": true }, "hex-color-regex": { "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==", "dev": true }, "hmac-drbg": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", - "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=", + "dev": true, "requires": { "hash.js": "^1.0.3", "minimalistic-assert": "^1.0.0", @@ -23329,9 +20072,7 @@ } }, "hosted-git-info": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-3.0.7.tgz", - "integrity": "sha512-fWqc0IcuXs+BmE9orLDyVykAG9GJtGLGuZAAqgcckPgv5xad4AcXGIv8galtQvlwutxSlaMcdw7BUtq2EIvqCQ==", + "version": "3.0.8", "dev": true, "requires": { "lru-cache": "^6.0.0" @@ -23339,8 +20080,6 @@ }, "hpack.js": { "version": "2.1.6", - "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz", - "integrity": "sha1-h3dMCUnlE/QuhFdbPEVoH63ioLI=", "dev": true, "requires": { "inherits": "^2.0.1", @@ -23351,14 +20090,10 @@ "dependencies": { "isarray": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", "dev": true }, "readable-stream": { "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", "dev": true, "requires": { "core-util-is": "~1.0.0", @@ -23370,16 +20105,8 @@ "util-deprecate": "~1.0.1" } }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, "string_decoder": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "dev": true, "requires": { "safe-buffer": "~5.1.0" @@ -23389,32 +20116,18 @@ }, "hsl-regex": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/hsl-regex/-/hsl-regex-1.0.0.tgz", - "integrity": "sha1-1JMwx4ntgZ4nakwNJy3/owsY/m4=", "dev": true }, "hsla-regex": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/hsla-regex/-/hsla-regex-1.0.0.tgz", - "integrity": "sha1-wc56MWjIxmFAM6S194d/OyJfnDg=", - "dev": true - }, - "html-comment-regex": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/html-comment-regex/-/html-comment-regex-1.1.2.tgz", - "integrity": "sha512-P+M65QY2JQ5Y0G9KKdlDpo0zK+/OHptU5AaBwUfAIDJZk1MYf32Frm84EcOytfJE0t5JvkAnKlmjsXDnWzCJmQ==", "dev": true }, "html-entities": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-1.3.1.tgz", - "integrity": "sha512-rhE/4Z3hIhzHAUKbW8jVcCyuT5oJCXXqhN/6mXXVCpzTmvJnoH2HL/bt3EZ6p55jbFJBeAe1ZNpL5BugLujxNA==", + "version": "1.4.0", "dev": true }, "htmlparser2": { "version": "3.10.1", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.10.1.tgz", - "integrity": "sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ==", "dev": true, "requires": { "domelementtype": "^1.3.1", @@ -23423,32 +20136,18 @@ "entities": "^1.1.1", "inherits": "^2.0.1", "readable-stream": "^3.1.1" - }, - "dependencies": { - "entities": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz", - "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==", - "dev": true - } } }, "http-cache-semantics": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz", - "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==", "dev": true }, "http-deceiver": { "version": "1.2.7", - "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz", - "integrity": "sha1-+nFolEq5pRnTN8sL7HKE3D5yPYc=", "dev": true }, "http-errors": { "version": "1.7.2", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz", - "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==", "dev": true, "requires": { "depd": "~1.1.2", @@ -23460,16 +20159,16 @@ "dependencies": { "inherits": { "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", "dev": true } } }, + "http-parser-js": { + "version": "0.5.3", + "dev": true + }, "http-proxy": { "version": "1.18.1", - "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz", - "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", "dev": true, "requires": { "eventemitter3": "^4.0.0", @@ -23479,8 +20178,6 @@ }, "http-proxy-agent": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz", - "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==", "dev": true, "requires": { "@tootallnate/once": "1", @@ -23490,8 +20187,6 @@ }, "http-proxy-middleware": { "version": "0.19.1", - "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-0.19.1.tgz", - "integrity": "sha512-yHYTgWMQO8VvwNS22eLLloAkvungsKdKTLO8AJlftYIKNfJr3GK3zK0ZCfzDDGUBttdGc8xFy1mCitvNKQtC3Q==", "dev": true, "requires": { "http-proxy": "^1.17.0", @@ -23502,8 +20197,6 @@ "dependencies": { "braces": { "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", "dev": true, "requires": { "arr-flatten": "^1.1.0", @@ -23520,8 +20213,6 @@ "dependencies": { "extend-shallow": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, "requires": { "is-extendable": "^0.1.0" @@ -23531,8 +20222,6 @@ }, "fill-range": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", "dev": true, "requires": { "extend-shallow": "^2.0.1", @@ -23543,8 +20232,6 @@ "dependencies": { "extend-shallow": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, "requires": { "is-extendable": "^0.1.0" @@ -23552,10 +20239,12 @@ } } }, + "is-extendable": { + "version": "0.1.1", + "dev": true + }, "is-number": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", "dev": true, "requires": { "kind-of": "^3.0.2" @@ -23563,8 +20252,6 @@ "dependencies": { "kind-of": { "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, "requires": { "is-buffer": "^1.1.5" @@ -23574,8 +20261,6 @@ }, "micromatch": { "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", "dev": true, "requires": { "arr-diff": "^4.0.0", @@ -23595,8 +20280,6 @@ }, "to-regex-range": { "version": "2.1.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", - "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", "dev": true, "requires": { "is-number": "^3.0.0", @@ -23607,8 +20290,6 @@ }, "http-signature": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", - "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", "dev": true, "requires": { "assert-plus": "^1.0.0", @@ -23618,14 +20299,10 @@ }, "https-browserify": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz", - "integrity": "sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM=", "dev": true }, "https-proxy-agent": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz", - "integrity": "sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA==", "dev": true, "requires": { "agent-base": "6", @@ -23634,8 +20311,6 @@ }, "humanize-ms": { "version": "1.2.1", - "resolved": "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz", - "integrity": "sha1-xG4xWaKT9riW2ikxbYtv6Lt5u+0=", "dev": true, "requires": { "ms": "^2.0.0" @@ -23643,44 +20318,30 @@ }, "iconv-lite": { "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", "dev": true, "requires": { "safer-buffer": ">= 2.1.2 < 3" } }, "icss-utils": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-4.1.1.tgz", - "integrity": "sha512-4aFq7wvWyMHKgxsH8QQtGpvbASCf+eM3wPRLI6R+MgAnTCZ6STYsRvttLvRWK0Nfif5piF394St3HeJDaljGPA==", + "version": "5.1.0", "dev": true, - "requires": { - "postcss": "^7.0.14" - } + "requires": {} }, "ieee754": { "version": "1.2.1", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", - "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", "dev": true }, "iferr": { "version": "0.1.5", - "resolved": "https://registry.npmjs.org/iferr/-/iferr-0.1.5.tgz", - "integrity": "sha1-xg7taebY/bazEEofy8ocGS3FtQE=", "dev": true }, "ignore": { "version": "5.1.8", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz", - "integrity": "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==", "dev": true }, "ignore-walk": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-3.0.3.tgz", - "integrity": "sha512-m7o6xuOaT1aqheYHKf8W6J5pYH85ZI9w077erOzLje3JsB1gkafkAhHHY19dqjulgIZHFm32Cp5uNZgcQqdJKw==", + "version": "3.0.4", "dev": true, "requires": { "minimatch": "^3.0.4" @@ -23688,64 +20349,84 @@ }, "image-size": { "version": "0.5.5", - "resolved": "https://registry.npmjs.org/image-size/-/image-size-0.5.5.tgz", - "integrity": "sha1-Cd/Uq50g4p6xw+gLiZA3jfnjy5w=", "dev": true, "optional": true }, "immediate": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz", - "integrity": "sha1-nbHb0Pr43m++D13V5Wu2BigN5ps=" + "version": "3.0.6" }, "import-fresh": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-2.0.0.tgz", - "integrity": "sha1-2BNVwVYS04bGH53dOSLUMEgipUY=", + "version": "3.3.0", "dev": true, "requires": { - "caller-path": "^2.0.0", - "resolve-from": "^3.0.0" + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" } }, "import-local": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/import-local/-/import-local-2.0.0.tgz", - "integrity": "sha512-b6s04m3O+s3CGSbqDIyP4R6aAwAeYlVq9+WUWep6iHa8ETRf9yei1U48C5MmfJmV9AiLYYBKPMq/W+/WRpQmCQ==", "dev": true, "requires": { "pkg-dir": "^3.0.0", "resolve-cwd": "^2.0.0" + }, + "dependencies": { + "find-up": { + "version": "3.0.0", + "dev": true, + "requires": { + "locate-path": "^3.0.0" + } + }, + "locate-path": { + "version": "3.0.0", + "dev": true, + "requires": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + } + }, + "p-limit": { + "version": "2.3.0", + "dev": true, + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "3.0.0", + "dev": true, + "requires": { + "p-limit": "^2.0.0" + } + }, + "path-exists": { + "version": "3.0.0", + "dev": true + }, + "pkg-dir": { + "version": "3.0.0", + "dev": true, + "requires": { + "find-up": "^3.0.0" + } + } } }, "imurmurhash": { "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", "dev": true }, "indent-string": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", - "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", - "dev": true - }, - "indexes-of": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/indexes-of/-/indexes-of-1.0.1.tgz", - "integrity": "sha1-8w9xbI4r00bHtn0985FVZqfAVgc=", "dev": true }, "infer-owner": { "version": "1.0.4", - "resolved": "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz", - "integrity": "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==", "dev": true }, "inflight": { "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", "dev": true, "requires": { "once": "^1.3.0", @@ -23754,19 +20435,14 @@ }, "inherits": { "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + "dev": true }, "ini": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ini/-/ini-2.0.0.tgz", - "integrity": "sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==", "dev": true }, "inquirer": { "version": "7.3.3", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-7.3.3.tgz", - "integrity": "sha512-JG3eIAj5V9CwcGvuOmoo6LB9kbAYT8HXffUl6memuszlwDC/qvFAJw49XJ5NROSFNPxp3iQg1GqkFhaY/CR0IA==", "dev": true, "requires": { "ansi-escapes": "^4.2.1", @@ -23784,25 +20460,15 @@ "through": "^2.3.6" }, "dependencies": { - "ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", - "dev": true - }, "ansi-styles": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "requires": { "color-convert": "^2.0.1" } }, "chalk": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", - "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", + "version": "4.1.1", "dev": true, "requires": { "ansi-styles": "^4.1.0", @@ -23811,8 +20477,6 @@ }, "color-convert": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, "requires": { "color-name": "~1.1.4" @@ -23820,52 +20484,14 @@ }, "color-name": { "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", "dev": true }, "has-flag": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true }, - "is-fullwidth-code-point": { - "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==", - "dev": true - }, - "string-width": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", - "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", - "dev": true, - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.0" - } - }, - "strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.0" - } - }, "supports-color": { "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "requires": { "has-flag": "^4.0.0" @@ -23875,8 +20501,6 @@ }, "internal-ip": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/internal-ip/-/internal-ip-4.3.0.tgz", - "integrity": "sha512-S1zBo1D6zcsyuC6PMmY5+55YMILQ9av8lotMx447Bq6SAgo/sDK6y6uUKmuYhW7eacnIhFfsPmCNYdDzsnnDCg==", "dev": true, "requires": { "default-gateway": "^4.2.0", @@ -23884,70 +20508,47 @@ } }, "ionicons": { - "version": "5.2.3", - "resolved": "https://registry.npmjs.org/ionicons/-/ionicons-5.2.3.tgz", - "integrity": "sha512-87qtgBkieKVFagwYA9Cf91B3PCahQbEOMwMt8bSvlQSgflZ4eE5qI4MGj2ZlIyadeX0dgo+0CzZsy3ow0CsBAg==" + "version": "5.5.2", + "requires": { + "@stencil/core": "^2.5.0" + } }, "ip": { "version": "1.1.5", - "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.5.tgz", - "integrity": "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=", "dev": true }, "ip-regex": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-2.1.0.tgz", - "integrity": "sha1-+ni/XS5pE8kRzp+BnuUUa7bYROk=", "dev": true }, "ipaddr.js": { "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==", "dev": true }, "is-absolute-url": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-2.1.0.tgz", - "integrity": "sha1-UFMN+4T8yap9vnhS6Do3uTufKqY=", + "version": "3.0.3", "dev": true }, "is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "version": "1.0.0", "dev": true, "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } + "kind-of": "^6.0.0" } }, "is-arguments": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.0.4.tgz", - "integrity": "sha512-xPh0Rmt8NE65sNzvyUmWgI1tz3mKq74lGA0mL8LYZcoIzKOzDh6HmrYm3d18k60nHerC8A9Km8kYu87zfSFnLA==", - "dev": true + "version": "1.1.0", + "dev": true, + "requires": { + "call-bind": "^1.0.0" + } }, "is-arrayish": { "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", "dev": true }, "is-binary-path": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", "dev": true, "requires": { "binary-extensions": "^2.0.0" @@ -23955,20 +20556,10 @@ }, "is-buffer": { "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", - "dev": true - }, - "is-callable": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.2.tgz", - "integrity": "sha512-dnMqspv5nU3LoewK2N/y7KLtxtakvTuaCsU9FU50/QDmdbHNy/4/JuRtMHqRU22o3q+W89YQndQEeCVwK+3qrA==", "dev": true }, "is-color-stop": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-color-stop/-/is-color-stop-1.1.0.tgz", - "integrity": "sha1-z/9HGu5N1cnhWFmPvhKWe1za00U=", "dev": true, "requires": { "css-color-names": "^0.0.4", @@ -23977,95 +20568,62 @@ "hsla-regex": "^1.0.0", "rgb-regex": "^1.0.1", "rgba-regex": "^1.0.0" + }, + "dependencies": { + "css-color-names": { + "version": "0.0.4", + "dev": true + } } }, "is-core-module": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.2.0.tgz", - "integrity": "sha512-XRAfAdyyY5F5cOXn7hYQDqh2Xmii+DEfIcQGxK/uNwMHhIkPWO0g8msXcbzLe+MpGoR951MlqM/2iIlU4vKDdQ==", + "version": "2.4.0", "dev": true, "requires": { "has": "^1.0.3" } }, "is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "version": "1.0.0", "dev": true, "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } + "kind-of": "^6.0.0" } }, "is-date-object": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.2.tgz", - "integrity": "sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g==", + "version": "1.0.4", "dev": true }, "is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "version": "1.0.2", "dev": true, "requires": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - }, - "dependencies": { - "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true - } + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" } }, - "is-directory": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/is-directory/-/is-directory-0.3.1.tgz", - "integrity": "sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE=", - "dev": true - }, "is-docker": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.1.1.tgz", - "integrity": "sha512-ZOoqiXfEwtGknTiuDEy8pN2CfE3TxMHprvNer1mXiqwkOT77Rw3YVrUQ52EqAOU3QAWDQ+bQdx7HJzrv7LS2Hw==", + "version": "2.2.1", "dev": true }, "is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", - "dev": true + "version": "1.0.1", + "dev": true, + "requires": { + "is-plain-object": "^2.0.4" + } }, "is-extglob": { "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", "dev": true }, "is-fullwidth-code-point": { - "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=" + "version": "3.0.0", + "dev": true }, "is-glob": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", - "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", "dev": true, "requires": { "is-extglob": "^2.1.1" @@ -24073,44 +20631,22 @@ }, "is-interactive": { "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==", "dev": true }, "is-lambda": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-lambda/-/is-lambda-1.0.1.tgz", - "integrity": "sha1-PZh3iZ5qU+/AFgUEzeFfgubwYdU=", - "dev": true - }, - "is-negative-zero": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.0.tgz", - "integrity": "sha1-lVOxIbD6wohp2p7UWeIMdUN4hGE=", "dev": true }, "is-number": { "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true - }, - "is-obj": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", - "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==", "dev": true }, "is-path-cwd": { "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-2.2.0.tgz", - "integrity": "sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==", "dev": true }, "is-path-in-cwd": { "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==", "dev": true, "requires": { "is-path-inside": "^2.1.0" @@ -24118,8 +20654,6 @@ }, "is-path-inside": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-2.1.0.tgz", - "integrity": "sha512-wiyhTzfDWsvwAW53OBWF5zuvaOGlZ6PwYxAbPVDhpm+gM09xKQGjBq/8uYN12aDvMxnAnq3dxTyoSoRNmg5YFg==", "dev": true, "requires": { "path-is-inside": "^1.0.2" @@ -24127,106 +20661,71 @@ }, "is-plain-object": { "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==", "dev": true, "requires": { "isobject": "^3.0.1" } }, "is-regex": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.1.tgz", - "integrity": "sha512-1+QkEcxiLlB7VEyFtyBg94e08OAsvq7FUBgApTq/w2ymCLyKJgDPsybBENVtA7XCQEgEXxKPonG+mvYRxh/LIg==", + "version": "1.1.3", "dev": true, "requires": { - "has-symbols": "^1.0.1" + "call-bind": "^1.0.2", + "has-symbols": "^1.0.2" } }, "is-resolvable": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-resolvable/-/is-resolvable-1.1.0.tgz", - "integrity": "sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg==", "dev": true }, "is-stream": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", - "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", "dev": true }, - "is-svg": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-svg/-/is-svg-3.0.0.tgz", - "integrity": "sha512-gi4iHK53LR2ujhLVVj+37Ykh9GLqYHX6JOVXbLAucaG/Cqw9xwdFOjDM2qeifLs1sF1npXXFvDu0r5HNgCMrzQ==", - "dev": true, - "requires": { - "html-comment-regex": "^1.1.0" - } - }, - "is-symbol": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.3.tgz", - "integrity": "sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ==", - "dev": true, - "requires": { - "has-symbols": "^1.0.1" - } - }, "is-typedarray": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", + "dev": true + }, + "is-unicode-supported": { + "version": "0.1.0", + "dev": true + }, + "is-what": { + "version": "3.14.1", "dev": true }, "is-windows": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", - "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", "dev": true }, "is-wsl": { "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", - "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", "dev": true, "requires": { "is-docker": "^2.0.0" } }, "isarray": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", - "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==" + "version": "2.0.5" }, "isexe": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", "dev": true }, "isobject": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", "dev": true }, "isstream": { "version": "0.1.2", - "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", - "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", "dev": true }, "istanbul-lib-coverage": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.0.0.tgz", - "integrity": "sha512-UiUIqxMgRDET6eR+o5HbfRYP1l0hqkWOs7vNxC/mggutCMUIhWMm8gAHb8tHlyfD3/l6rlgNA5cKdDzEAf6hEg==", "dev": true }, "istanbul-lib-instrument": { "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==", "dev": true, "requires": { "@babel/core": "^7.7.5", @@ -24237,16 +20736,12 @@ "dependencies": { "semver": { "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", "dev": true } } }, "jest-worker": { - "version": "26.5.0", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-26.5.0.tgz", - "integrity": "sha512-kTw66Dn4ZX7WpjZ7T/SUDgRhapFRKWmisVAF0Rv4Fu8SLFD7eLbqpLvbxVqYhSgaWa7I+bW7pHnbyfNsH6stug==", + "version": "26.6.2", "dev": true, "requires": { "@types/node": "*", @@ -24256,14 +20751,10 @@ "dependencies": { "has-flag": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true }, "supports-color": { "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "requires": { "has-flag": "^4.0.0" @@ -24273,14 +20764,10 @@ }, "js-tokens": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", "dev": true }, "js-yaml": { - "version": "3.14.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.0.tgz", - "integrity": "sha512-/4IbIeHcD9VMHFqDR/gQ7EdZdLimOvW2DdcxFjdyyZ9NsbS+ccrXqVWDtab/lRl5AlUqmpBx8EhPaWR+OtY17A==", + "version": "3.14.1", "dev": true, "requires": { "argparse": "^1.0.7", @@ -24289,63 +20776,43 @@ }, "jsbn": { "version": "0.1.1", - "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", - "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", "dev": true }, "jsesc": { "version": "2.5.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", "dev": true }, "json-parse-better-errors": { "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==", "dev": true }, "json-parse-even-better-errors": { "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==", "dev": true }, "json-pointer": { "version": "0.6.1", - "resolved": "https://registry.npmjs.org/json-pointer/-/json-pointer-0.6.1.tgz", - "integrity": "sha512-3OvjqKdCBvH41DLpV4iSt6v2XhZXV1bPB4OROuknvUXI7ZQNofieCPkmE26stEJ9zdQuvIxDHCuYhfgxFAAs+Q==", "requires": { "foreach": "^2.0.4" } }, "json-schema": { "version": "0.2.3", - "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", - "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=", "dev": true }, "json-schema-traverse": { - "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==" + "version": "0.4.1" }, "json-stringify-safe": { "version": "5.0.1", - "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", - "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", "dev": true }, "json3": { "version": "3.3.3", - "resolved": "https://registry.npmjs.org/json3/-/json3-3.3.3.tgz", - "integrity": "sha512-c7/8mbUsKigAbLkD5B010BK4D9LZm7A1pNItkEwiUZRpIN66exu/e7YQWysGun+TRKaJp8MhemM+VkfWv42aCA==", "dev": true }, "json5": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.1.3.tgz", - "integrity": "sha512-KXPvOm8K9IJKFM0bmdn8QXh7udDh1g/giieX0NLCaMnb4hEiVFqnop2ImTXCc5e0/oHz3LTqmHGtExn5hfMkOA==", + "version": "2.2.0", "dev": true, "requires": { "minimist": "^1.2.5" @@ -24353,14 +20820,10 @@ }, "jsonc-parser": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.0.0.tgz", - "integrity": "sha512-fQzRfAbIBnR0IQvftw9FJveWiHp72Fg20giDrHz6TdfB12UH/uue0D3hm57UB5KgAVuniLMCaS8P1IMj9NR7cA==", "dev": true }, "jsonfile": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", "dev": true, "requires": { "graceful-fs": "^4.1.6" @@ -24368,32 +20831,13 @@ }, "jsonparse": { "version": "1.3.1", - "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", - "integrity": "sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA=", "dev": true }, "jsonpointerx": { - "version": "1.0.30", - "resolved": "https://registry.npmjs.org/jsonpointerx/-/jsonpointerx-1.0.30.tgz", - "integrity": "sha512-nEyQ2/CntckMpxK4ZTDOO3NmuRmxYTT5qnwnxoYKHZon1aa4TtEzLXF3FDVIH8Ra15zoKaNVmff1O3jcSlEKqA==" - }, - "jsontokens": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/jsontokens/-/jsontokens-3.0.0.tgz", - "integrity": "sha512-P0QZC5AjOkn3t1ej6OuI7+XqoEctYj83UK4pw0WpHY4/z6a5PpZCJSpp5NZodq94GFkw2PfB9DPFoDM5qpyp/g==", - "requires": { - "@types/elliptic": "^6.4.9", - "asn1.js": "^5.0.1", - "base64url": "^3.0.1", - "ecdsa-sig-formatter": "^1.0.11", - "elliptic": "^6.4.1", - "sha.js": "^2.4.11" - } + "version": "1.1.3" }, "jsprim": { "version": "1.4.1", - "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", - "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", "dev": true, "requires": { "assert-plus": "1.0.0", @@ -24404,8 +20848,6 @@ }, "karma-source-map-support": { "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==", "dev": true, "requires": { "source-map-support": "^0.5.5" @@ -24413,50 +20855,64 @@ }, "killable": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/killable/-/killable-1.0.1.tgz", - "integrity": "sha512-LzqtLKlUwirEUyl/nicirVmNiPvYs7l5n8wOPP7fyJVpUPkvCnW/vuiXGpylGUlnPDnB7311rARzAt3Mhswpjg==", "dev": true }, "kind-of": { "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", "dev": true }, "klona": { "version": "2.0.4", - "resolved": "https://registry.npmjs.org/klona/-/klona-2.0.4.tgz", - "integrity": "sha512-ZRbnvdg/NxqzC7L9Uyqzf4psi1OM4Cuc+sJAkQPjO6XkQIJTNbfK2Rsmbw8fx1p2mkZdp2FZYo2+LwXYY/uwIA==", "dev": true }, "less": { - "version": "3.12.2", - "resolved": "https://registry.npmjs.org/less/-/less-3.12.2.tgz", - "integrity": "sha512-+1V2PCMFkL+OIj2/HrtrvZw0BC0sYLMICJfbQjuj/K8CEnlrFX6R5cKKgzzttsZDHyxQNL1jqMREjKN3ja/E3Q==", + "version": "4.1.1", "dev": true, "requires": { + "copy-anything": "^2.0.1", "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", + "needle": "^2.5.2", + "parse-node-version": "^1.0.1", "source-map": "~0.6.0", "tslib": "^1.10.0" }, "dependencies": { + "make-dir": { + "version": "2.1.0", + "dev": true, + "optional": true, + "requires": { + "pify": "^4.0.1", + "semver": "^5.6.0" + } + }, + "pify": { + "version": "4.0.1", + "dev": true, + "optional": true + }, + "semver": { + "version": "5.7.1", + "dev": true, + "optional": true + }, + "source-map": { + "version": "0.6.1", + "dev": true, + "optional": true + }, "tslib": { "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", "dev": true } } }, "less-loader": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/less-loader/-/less-loader-7.0.2.tgz", - "integrity": "sha512-7MKlgjnkCf63E3Lv6w2FvAEgLMx3d/tNBExITcanAq7ys5U8VPWT3F6xcRjYmdNfkoQ9udoVFb1r2azSiTnD6w==", + "version": "7.3.0", "dev": true, "requires": { "klona": "^2.0.4", @@ -24465,12 +20921,10 @@ }, "dependencies": { "schema-utils": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.0.0.tgz", - "integrity": "sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA==", + "version": "3.1.0", "dev": true, "requires": { - "@types/json-schema": "^7.0.6", + "@types/json-schema": "^7.0.7", "ajv": "^6.12.5", "ajv-keywords": "^3.5.2" } @@ -24478,39 +20932,43 @@ } }, "license-webpack-plugin": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/license-webpack-plugin/-/license-webpack-plugin-2.3.1.tgz", - "integrity": "sha512-yhqTmlYIEpZWA122lf6E0G8+rkn0AzoQ1OpzUKKs/lXUqG1plmGnwmkuuPlfggzJR5y6DLOdot/Tv00CC51CeQ==", + "version": "2.3.11", "dev": true, "requires": { "@types/webpack-sources": "^0.1.5", "webpack-sources": "^1.2.0" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "dev": true + }, + "webpack-sources": { + "version": "1.4.3", + "dev": true, + "requires": { + "source-list-map": "^2.0.0", + "source-map": "~0.6.1" + } + } } }, "lie": { "version": "3.1.1", - "resolved": "https://registry.npmjs.org/lie/-/lie-3.1.1.tgz", - "integrity": "sha1-mkNrLMd0bKWd56QfpGmz77dr2H4=", "requires": { "immediate": "~3.0.5" } }, "lines-and-columns": { "version": "1.1.6", - "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.1.6.tgz", - "integrity": "sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA=", "dev": true }, "loader-runner": { "version": "2.4.0", - "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-2.4.0.tgz", - "integrity": "sha512-Jsmr89RcXGIwivFY21FcRrisYZfvLMTWx5kOLc+JTxtpBOG6xML0vzbc6SEQG2FO9/4Fc3wW4LVcB5DmGflaRw==", "dev": true }, "loader-utils": { "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==", "dev": true, "requires": { "big.js": "^5.2.2", @@ -24519,70 +20977,47 @@ } }, "localforage": { - "version": "1.7.1", - "resolved": "https://registry.npmjs.org/localforage/-/localforage-1.7.1.tgz", - "integrity": "sha1-5JJ+BCMCuGTbMPMhHxO1xvDell0=", + "version": "1.9.0", "requires": { "lie": "3.1.1" } }, - "localforage-cordovasqlitedriver": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/localforage-cordovasqlitedriver/-/localforage-cordovasqlitedriver-1.7.0.tgz", - "integrity": "sha1-i5OVd1nuaI06WNW6fAR39sy1ODg=", - "requires": { - "localforage": ">=1.5.0" - } - }, "locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "version": "5.0.0", + "dev": true, "requires": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" + "p-locate": "^4.1.0" } }, "lodash": { - "version": "4.17.20", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz", - "integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==", + "version": "4.17.21", "dev": true }, "lodash.memoize": { "version": "4.1.2", - "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", - "integrity": "sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4=", "dev": true }, "lodash.uniq": { "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", - "integrity": "sha1-0CJTc662Uq3BvILklFM5qEJ1R3M=", "dev": true }, "log-symbols": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.0.0.tgz", - "integrity": "sha512-FN8JBzLx6CzeMrB0tg6pqlGU1wCrXW+ZXGH481kfsBqer0hToTIiHdjH4Mq8xJUbvATujKCvaREGWpGUionraA==", + "version": "4.1.0", "dev": true, "requires": { - "chalk": "^4.0.0" + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" }, "dependencies": { "ansi-styles": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "requires": { "color-convert": "^2.0.1" } }, "chalk": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", - "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", + "version": "4.1.1", "dev": true, "requires": { "ansi-styles": "^4.1.0", @@ -24591,8 +21026,6 @@ }, "color-convert": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, "requires": { "color-name": "~1.1.4" @@ -24600,20 +21033,14 @@ }, "color-name": { "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, "has-flag": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true }, "supports-color": { "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "requires": { "has-flag": "^4.0.0" @@ -24623,14 +21050,10 @@ }, "loglevel": { "version": "1.7.1", - "resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.7.1.tgz", - "integrity": "sha512-Hesni4s5UkWkwCGJMQGAh71PaLUmKFM60dHvq0zi/vDhhrzuk+4GgNbTXJ12YYQJn6ZKBDNIjYcuQGKudvqrIw==", "dev": true }, "lru-cache": { "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", "dev": true, "requires": { "yallist": "^4.0.0" @@ -24638,41 +21061,30 @@ }, "magic-string": { "version": "0.25.7", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.7.tgz", - "integrity": "sha512-4CrMT5DOHTDk4HYDlzmwu4FVCcIYI8gauveasrdCu2IKIFOJ3f0v/8MDGJCDL9oD2ppz/Av1b0Nj345H9M+XIA==", "dev": true, "requires": { "sourcemap-codec": "^1.4.4" } }, "make-dir": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", - "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", + "version": "3.1.0", "dev": true, "requires": { - "pify": "^4.0.1", - "semver": "^5.6.0" + "semver": "^6.0.0" }, "dependencies": { "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "version": "6.3.0", "dev": true } } }, "make-error": { "version": "1.3.6", - "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", - "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", "dev": true }, "make-fetch-happen": { "version": "8.0.14", - "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-8.0.14.tgz", - "integrity": "sha512-EsS89h6l4vbfJEtBZnENTOFk8mCRpY5ru36Xe5bcX1KYIli2mkSHqoFsp5O1wMDvTJJzxe/4THpCTtygjeeGWQ==", "dev": true, "requires": { "agentkeepalive": "^4.1.3", @@ -24694,46 +21106,39 @@ "dependencies": { "err-code": { "version": "2.0.3", - "resolved": "https://registry.npmjs.org/err-code/-/err-code-2.0.3.tgz", - "integrity": "sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==", "dev": true }, "promise-retry": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/promise-retry/-/promise-retry-2.0.1.tgz", - "integrity": "sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==", "dev": true, "requires": { "err-code": "^2.0.2", "retry": "^0.12.0" } + }, + "retry": { + "version": "0.12.0", + "dev": true } } }, "map-cache": { "version": "0.2.2", - "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", - "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=", "dev": true }, "map-visit": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", - "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", "dev": true, "requires": { "object-visit": "^1.0.0" } }, "marked": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/marked/-/marked-2.0.0.tgz", - "integrity": "sha512-NqRSh2+LlN2NInpqTQnS614Y/3NkVMFFU6sJlRFEpxJ/LHuK/qJECH7/fXZjk4VZstPW/Pevjil/VtSONsLc7Q==" + "version": "2.1.3" }, "md5.js": { "version": "1.3.5", - "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", - "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", + "dev": true, "requires": { "hash-base": "^3.0.0", "inherits": "^2.0.1", @@ -24741,21 +21146,15 @@ } }, "mdn-data": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.4.tgz", - "integrity": "sha512-iV3XNKw06j5Q7mi6h+9vbx23Tv7JkjEVgKHW4pimwyDGWm0OIQntJJ+u1C6mg6mK1EaTv42XQ7w76yuzH7M2cA==", + "version": "2.0.14", "dev": true }, "media-typer": { "version": "0.3.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=", "dev": true }, "memory-fs": { "version": "0.4.1", - "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.4.1.tgz", - "integrity": "sha1-OpoguEYlI+RHz7x+i7gO1me/xVI=", "dev": true, "requires": { "errno": "^0.1.3", @@ -24764,14 +21163,10 @@ "dependencies": { "isarray": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", "dev": true }, "readable-stream": { "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", "dev": true, "requires": { "core-util-is": "~1.0.0", @@ -24783,16 +21178,8 @@ "util-deprecate": "~1.0.1" } }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, "string_decoder": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "dev": true, "requires": { "safe-buffer": "~5.1.0" @@ -24802,93 +21189,76 @@ }, "merge-descriptors": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", - "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=", "dev": true }, "merge-source-map": { "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==", "dev": true, "requires": { "source-map": "^0.6.1" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "dev": true + } } }, "merge-stream": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", "dev": true }, "merge2": { "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", "dev": true }, - "merkle-lib": { - "version": "2.0.10", - "resolved": "https://registry.npmjs.org/merkle-lib/-/merkle-lib-2.0.10.tgz", - "integrity": "sha1-grjbrnXieneFOItz+ddyXQ9vMyY=" - }, "methods": { "version": "1.1.2", - "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", - "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=", "dev": true }, "micromatch": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.2.tgz", - "integrity": "sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q==", + "version": "4.0.4", "dev": true, "requires": { "braces": "^3.0.1", - "picomatch": "^2.0.5" + "picomatch": "^2.2.3" } }, "miller-rabin": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz", - "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", "dev": true, "requires": { "bn.js": "^4.0.0", "brorand": "^1.0.1" + }, + "dependencies": { + "bn.js": { + "version": "4.12.0", + "dev": true + } } }, "mime": { "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", "dev": true }, "mime-db": { - "version": "1.44.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.44.0.tgz", - "integrity": "sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg==", + "version": "1.48.0", "dev": true }, "mime-types": { - "version": "2.1.27", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.27.tgz", - "integrity": "sha512-JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w==", + "version": "2.1.31", "dev": true, "requires": { - "mime-db": "1.44.0" + "mime-db": "1.48.0" } }, "mimic-fn": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", "dev": true }, "mini-css-extract-plugin": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-1.2.1.tgz", - "integrity": "sha512-G3yw7/TQaPfkuiR73MDcyiqhyP8SnbmLhUbpC76H+wtQxA6wfKhMCQOCb6wnPK0dQbjORAeOILQqEesg4/wF7A==", + "version": "1.3.5", "dev": true, "requires": { "loader-utils": "^2.0.0", @@ -24897,46 +21267,48 @@ }, "dependencies": { "schema-utils": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.0.0.tgz", - "integrity": "sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA==", + "version": "3.1.0", "dev": true, "requires": { - "@types/json-schema": "^7.0.6", + "@types/json-schema": "^7.0.7", "ajv": "^6.12.5", "ajv-keywords": "^3.5.2" } + }, + "source-map": { + "version": "0.6.1", + "dev": true + }, + "webpack-sources": { + "version": "1.4.3", + "dev": true, + "requires": { + "source-list-map": "^2.0.0", + "source-map": "~0.6.1" + } } } }, "minimalistic-assert": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", - "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==" + "dev": true }, "minimalistic-crypto-utils": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", - "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=" + "dev": true }, "minimatch": { "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", "dev": true, "requires": { "brace-expansion": "^1.1.7" } }, "minimist": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" + "version": "1.2.5" }, "minipass": { "version": "3.1.3", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.1.3.tgz", - "integrity": "sha512-Mgd2GdMVzY+x3IJ+oHnVM+KG3lA5c8tnabyJKmHSaG2kAGpudxuOf8ToDkhumF7UzME7DecbQE9uOZhNm7PuJg==", "dev": true, "requires": { "yallist": "^4.0.0" @@ -24944,8 +21316,6 @@ }, "minipass-collect": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-1.0.2.tgz", - "integrity": "sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==", "dev": true, "requires": { "minipass": "^3.0.0" @@ -24953,8 +21323,6 @@ }, "minipass-fetch": { "version": "1.3.3", - "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-1.3.3.tgz", - "integrity": "sha512-akCrLDWfbdAWkMLBxJEeWTdNsjML+dt5YgOI4gJ53vuO0vrmYQkUPxa6j6V65s9CcePIr2SSWqjT2EcrNseryQ==", "dev": true, "requires": { "encoding": "^0.1.12", @@ -24965,8 +21333,6 @@ }, "minipass-flush": { "version": "1.0.5", - "resolved": "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz", - "integrity": "sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==", "dev": true, "requires": { "minipass": "^3.0.0" @@ -24974,8 +21340,6 @@ }, "minipass-json-stream": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minipass-json-stream/-/minipass-json-stream-1.0.1.tgz", - "integrity": "sha512-ODqY18UZt/I8k+b7rl2AENgbWE8IDYam+undIJONvigAz8KR5GWblsFTEfQs0WODsjbSXWlm+JHEv8Gr6Tfdbg==", "dev": true, "requires": { "jsonparse": "^1.3.1", @@ -24984,8 +21348,6 @@ }, "minipass-pipeline": { "version": "1.2.4", - "resolved": "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz", - "integrity": "sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==", "dev": true, "requires": { "minipass": "^3.0.0" @@ -24993,8 +21355,6 @@ }, "minipass-sized": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/minipass-sized/-/minipass-sized-1.0.3.tgz", - "integrity": "sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g==", "dev": true, "requires": { "minipass": "^3.0.0" @@ -25002,8 +21362,6 @@ }, "minizlib": { "version": "2.1.2", - "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", - "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", "dev": true, "requires": { "minipass": "^3.0.0", @@ -25012,8 +21370,6 @@ }, "mississippi": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/mississippi/-/mississippi-3.0.0.tgz", - "integrity": "sha512-x471SsVjUtBRtcvd4BzKE9kFC+/2TeWgKCgw0bZcw1b9l2X3QX5vCWgF+KaZaYm87Ss//rHnWryupDrgLvmSkA==", "dev": true, "requires": { "concat-stream": "^1.5.0", @@ -25030,38 +21386,18 @@ }, "mixin-deep": { "version": "1.3.2", - "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", - "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==", "dev": true, "requires": { "for-in": "^1.0.2", "is-extendable": "^1.0.1" - }, - "dependencies": { - "is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "requires": { - "is-plain-object": "^2.0.4" - } - } } }, "mkdirp": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", - "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", - "dev": true, - "requires": { - "minimist": "^1.2.5" - } + "version": "1.0.4", + "dev": true }, "move-concurrently": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/move-concurrently/-/move-concurrently-1.0.1.tgz", - "integrity": "sha1-viwAX9oy4LKa8fBdfEszIUxwH5I=", "dev": true, "requires": { "aproba": "^1.1.1", @@ -25072,10 +21408,15 @@ "run-queue": "^1.0.3" }, "dependencies": { + "mkdirp": { + "version": "0.5.5", + "dev": true, + "requires": { + "minimist": "^1.2.5" + } + }, "rimraf": { "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", "dev": true, "requires": { "glob": "^7.1.3" @@ -25085,14 +21426,10 @@ }, "ms": { "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", "dev": true }, "multicast-dns": { "version": "6.2.3", - "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-6.2.3.tgz", - "integrity": "sha512-ji6J5enbMyGRHIAkAOu3WdV8nggqviKCEKtXcOqfphZZtQrmHKycfynJ2V7eVPUA4NhJ6V7Wf4TmGbTwKE9B6g==", "dev": true, "requires": { "dns-packet": "^1.3.1", @@ -25101,25 +21438,18 @@ }, "multicast-dns-service-types": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/multicast-dns-service-types/-/multicast-dns-service-types-1.1.0.tgz", - "integrity": "sha1-iZ8R2WhuXgXLkbNdXw5jt3PPyQE=", "dev": true }, "mute-stream": { "version": "0.0.8", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", - "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", "dev": true }, - "nan": { - "version": "2.14.2", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.2.tgz", - "integrity": "sha512-M2ufzIiINKCuDfBSAUr1vWQ+vuVcA9kqx8JJUsbQi6yf1uGRyb7HfpdfUr5qLXf3B/t8dPvcjhKMmlfnP47EzQ==" + "nanoid": { + "version": "3.1.23", + "dev": true }, "nanomatch": { "version": "1.2.13", - "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", - "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", "dev": true, "requires": { "arr-diff": "^4.0.0", @@ -25135,46 +21465,43 @@ "to-regex": "^3.0.1" } }, - "native-request": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/native-request/-/native-request-1.0.8.tgz", - "integrity": "sha512-vU2JojJVelUGp6jRcLwToPoWGxSx23z/0iX+I77J3Ht17rf2INGjrhOoQnjVo60nQd8wVsgzKkPfRXBiVdD2ag==", + "needle": { + "version": "2.8.0", "dev": true, - "optional": true + "optional": true, + "requires": { + "debug": "^3.2.6", + "iconv-lite": "^0.4.4", + "sax": "^1.2.4" + }, + "dependencies": { + "debug": { + "version": "3.2.7", + "dev": true, + "optional": true, + "requires": { + "ms": "^2.1.1" + } + } + } }, "negotiator": { "version": "0.6.2", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", - "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==", "dev": true }, "neo-async": { - "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": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.0.0.tgz", - "integrity": "sha1-yobR/ogoFpsBICCOPchCS524NCw=", - "dev": true + "version": "2.6.2" }, "nice-try": { "version": "1.0.5", - "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", - "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", "dev": true }, "node-forge": { "version": "0.10.0", - "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.10.0.tgz", - "integrity": "sha512-PPmu8eEeG9saEUvI97fm4OYxXVB6bFvyNTyiUOBichBpFG8A1Ljw3bY62+5oOjDEMHRnd0Y7HQ+x7uzxOzC6JA==", "dev": true }, "node-gyp": { "version": "7.1.2", - "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-7.1.2.tgz", - "integrity": "sha512-CbpcIo7C3eMu3dL1c3d0xw449fHIGALIJsRP4DDPHpyiW8vcriNY7ubh9TE4zEKfSxscY7PjeFnshE7h75ynjQ==", "dev": true, "requires": { "env-paths": "^2.2.0", @@ -25187,32 +21514,75 @@ "semver": "^7.3.2", "tar": "^6.0.2", "which": "^2.0.2" + } + }, + "node-html-parser": { + "version": "3.3.6", + "dev": true, + "requires": { + "css-select": "^4.1.3", + "he": "1.2.0" }, "dependencies": { - "which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "css-select": { + "version": "4.1.3", "dev": true, "requires": { - "isexe": "^2.0.0" + "boolbase": "^1.0.0", + "css-what": "^5.0.0", + "domhandler": "^4.2.0", + "domutils": "^2.6.0", + "nth-check": "^2.0.0" + } + }, + "css-what": { + "version": "5.0.1", + "dev": true + }, + "dom-serializer": { + "version": "1.3.2", + "dev": true, + "requires": { + "domelementtype": "^2.0.1", + "domhandler": "^4.2.0", + "entities": "^2.0.0" + } + }, + "domelementtype": { + "version": "2.2.0", + "dev": true + }, + "domhandler": { + "version": "4.2.0", + "dev": true, + "requires": { + "domelementtype": "^2.2.0" + } + }, + "domutils": { + "version": "2.7.0", + "dev": true, + "requires": { + "dom-serializer": "^1.0.1", + "domelementtype": "^2.2.0", + "domhandler": "^4.2.0" + } + }, + "entities": { + "version": "2.2.0", + "dev": true + }, + "nth-check": { + "version": "2.0.0", + "dev": true, + "requires": { + "boolbase": "^1.0.0" } } } }, - "node-html-parser": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/node-html-parser/-/node-html-parser-2.0.0.tgz", - "integrity": "sha512-3wJdYSxiVIBxuiFm9UtfNWAlBw2P+Vb/RN1nqf40q2JeZDpcJ1HsrWuWV3j15SSJ25TvfnOoac2Q+uDU9iY0sw==", - "dev": true, - "requires": { - "he": "1.2.0" - } - }, "node-libs-browser": { "version": "2.2.1", - "resolved": "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-2.2.1.tgz", - "integrity": "sha512-h/zcD8H9kaDZ9ALUWwlBUDo6TKF8a7qBSCSEGfjTVIYeqsioSKaAX+BN7NgiMGp6iSIXZ3PxgCu8KS3b71YK5Q==", "dev": true, "requires": { "assert": "^1.1.1", @@ -25240,22 +21610,25 @@ "vm-browserify": "^1.0.1" }, "dependencies": { + "buffer": { + "version": "4.9.2", + "dev": true, + "requires": { + "base64-js": "^1.0.2", + "ieee754": "^1.1.4", + "isarray": "^1.0.0" + } + }, "isarray": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", "dev": true }, "punycode": { "version": "1.4.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", - "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", "dev": true }, "readable-stream": { "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", "dev": true, "requires": { "core-util-is": "~1.0.0", @@ -25265,37 +21638,23 @@ "safe-buffer": "~5.1.1", "string_decoder": "~1.1.1", "util-deprecate": "~1.0.1" - }, - "dependencies": { - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" - } - } } }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true + "string_decoder": { + "version": "1.1.1", + "dev": true, + "requires": { + "safe-buffer": "~5.1.0" + } } } }, "node-releases": { - "version": "1.1.67", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.67.tgz", - "integrity": "sha512-V5QF9noGFl3EymEwUYzO+3NTDpGfQB4ve6Qfnzf3UNydMhjQRVPR1DZTuvWiLzaFJYw2fmDwAfnRNEVb64hSIg==", + "version": "1.1.73", "dev": true }, "nopt": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz", - "integrity": "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==", "dev": true, "requires": { "abbrev": "1" @@ -25303,26 +21662,18 @@ }, "normalize-path": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", "dev": true }, "normalize-range": { "version": "0.1.2", - "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", - "integrity": "sha1-LRDAa9/TEuqXd2laTShDlFa3WUI=", "dev": true }, "normalize-url": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-3.3.0.tgz", - "integrity": "sha512-U+JJi7duF1o+u2pynbp2zXDW2/PADgC30f0GsHZtRh+HOcXHnw137TrNlyxxRvWW5fjKd3bcLHPxofWuCjaeZg==", + "version": "6.1.0", "dev": true }, "npm-bundled": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-1.1.1.tgz", - "integrity": "sha512-gqkfgGePhTpAEgUsGEgcq1rqPXA+tv/aVBlgEzfXwA1yiUJF7xtEt3CtVwOjNYQOVknDk0F20w58Fnm3EtG0fA==", + "version": "1.1.2", "dev": true, "requires": { "npm-normalize-package-bin": "^1.0.1" @@ -25330,8 +21681,6 @@ }, "npm-install-checks": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/npm-install-checks/-/npm-install-checks-4.0.0.tgz", - "integrity": "sha512-09OmyDkNLYwqKPOnbI8exiOZU2GVVmQp7tgez2BPi5OZC8M82elDAps7sxC4l//uSUtotWqoEIDwjRvWH4qz8w==", "dev": true, "requires": { "semver": "^7.1.1" @@ -25339,14 +21688,10 @@ }, "npm-normalize-package-bin": { "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==", "dev": true }, "npm-package-arg": { "version": "8.1.0", - "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-8.1.0.tgz", - "integrity": "sha512-/ep6QDxBkm9HvOhOg0heitSd7JHA1U7y1qhhlRlteYYAi9Pdb/ZV7FW5aHpkrpM8+P+4p/jjR8zCyKPBMBjSig==", "dev": true, "requires": { "hosted-git-info": "^3.0.6", @@ -25355,9 +21700,7 @@ } }, "npm-packlist": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-2.1.4.tgz", - "integrity": "sha512-Qzg2pvXC9U4I4fLnUrBmcIT4x0woLtUgxUi9eC+Zrcv1Xx5eamytGAfbDWQ67j7xOcQ2VW1I3su9smVTIdu7Hw==", + "version": "2.2.2", "dev": true, "requires": { "glob": "^7.1.6", @@ -25368,8 +21711,6 @@ }, "npm-pick-manifest": { "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==", "dev": true, "requires": { "npm-install-checks": "^4.0.0", @@ -25379,8 +21720,6 @@ }, "npm-registry-fetch": { "version": "9.0.0", - "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-9.0.0.tgz", - "integrity": "sha512-PuFYYtnQ8IyVl6ib9d3PepeehcUeHN9IO5N/iCRhyg9tStQcqGQBRVHmfmMWPDERU3KwZoHFvbJ4FPXPspvzbA==", "dev": true, "requires": { "@npmcli/ci-detect": "^1.0.0", @@ -25395,17 +21734,19 @@ }, "npm-run-path": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", - "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", "dev": true, "requires": { "path-key": "^2.0.0" + }, + "dependencies": { + "path-key": { + "version": "2.0.1", + "dev": true + } } }, "npmlog": { "version": "4.1.2", - "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", - "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", "dev": true, "requires": { "are-we-there-yet": "~1.1.2", @@ -25416,41 +21757,25 @@ }, "nth-check": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.2.tgz", - "integrity": "sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==", "dev": true, "requires": { "boolbase": "~1.0.0" } }, - "num2fraction": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/num2fraction/-/num2fraction-1.2.2.tgz", - "integrity": "sha1-b2gragJ6Tp3fpFZM0lidHU5mnt4=", - "dev": true - }, "number-is-nan": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", - "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", "dev": true }, "oauth-sign": { "version": "0.9.0", - "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", - "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", "dev": true }, "object-assign": { "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", "dev": true }, "object-copy": { "version": "0.1.0", - "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", - "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", "dev": true, "requires": { "copy-descriptor": "^0.1.0", @@ -25460,17 +21785,42 @@ "dependencies": { "define-property": { "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", "dev": true, "requires": { "is-descriptor": "^0.1.0" } }, + "is-accessor-descriptor": { + "version": "0.1.6", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + } + }, + "is-data-descriptor": { + "version": "0.1.4", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + } + }, + "is-descriptor": { + "version": "0.1.6", + "dev": true, + "requires": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + }, + "dependencies": { + "kind-of": { + "version": "5.1.0", + "dev": true + } + } + }, "kind-of": { "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, "requires": { "is-buffer": "^1.1.5" @@ -25478,32 +21828,20 @@ } } }, - "object-inspect": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.9.0.tgz", - "integrity": "sha512-i3Bp9iTqwhaLZBxGkRfo5ZbE07BQRT7MGu8+nNgwW9ItGp1TzCTw2DLEoWwjClxBjOFI/hWljTAmYGCEwmtnOw==", - "dev": true - }, "object-is": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.4.tgz", - "integrity": "sha512-1ZvAZ4wlF7IyPVOcE1Omikt7UpaFlOQq0HlSti+ZvDH3UiD2brwGMwDbyV43jao2bKJ+4+WdPJHSd7kgzKYVqg==", + "version": "1.1.5", "dev": true, "requires": { - "call-bind": "^1.0.0", + "call-bind": "^1.0.2", "define-properties": "^1.1.3" } }, "object-keys": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", "dev": true }, "object-visit": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", - "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", "dev": true, "requires": { "isobject": "^3.0.0" @@ -25511,8 +21849,6 @@ }, "object.assign": { "version": "4.1.2", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", - "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", "dev": true, "requires": { "call-bind": "^1.0.0", @@ -25521,48 +21857,19 @@ "object-keys": "^1.1.1" } }, - "object.getownpropertydescriptors": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.1.tgz", - "integrity": "sha512-6DtXgZ/lIZ9hqx4GtZETobXLR/ZLaa0aqV0kzbn80Rf8Z2e/XFnhA0I7p07N2wH8bBBltr2xQPi6sbKWAY2Eng==", - "dev": true, - "requires": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.1" - } - }, "object.pick": { "version": "1.3.0", - "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", - "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", "dev": true, "requires": { "isobject": "^3.0.1" } }, - "object.values": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.2.tgz", - "integrity": "sha512-MYC0jvJopr8EK6dPBiO8Nb9mvjdypOachO5REGk6MXzujbBrAisKo3HmdEI6kZDL6fC31Mwee/5YbtMebixeag==", - "dev": true, - "requires": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.1", - "has": "^1.0.3" - } - }, "obuf": { "version": "1.1.2", - "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz", - "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==", "dev": true }, "on-finished": { "version": "2.3.0", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", - "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", "dev": true, "requires": { "ee-first": "1.1.1" @@ -25570,14 +21877,10 @@ }, "on-headers": { "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==", "dev": true }, "once": { "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", "dev": true, "requires": { "wrappy": "1" @@ -25585,17 +21888,13 @@ }, "onetime": { "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", "dev": true, "requires": { "mimic-fn": "^2.1.0" } }, "open": { - "version": "7.3.0", - "resolved": "https://registry.npmjs.org/open/-/open-7.3.0.tgz", - "integrity": "sha512-mgLwQIx2F/ye9SmbrUkurZCnkoXyXyu9EbHtJZrICjVAJfyMArdHp3KkixGdZx1ZHFPNIwl0DDM1dFFqXbTLZw==", + "version": "7.4.0", "dev": true, "requires": { "is-docker": "^2.0.0", @@ -25604,8 +21903,6 @@ }, "opn": { "version": "5.5.0", - "resolved": "https://registry.npmjs.org/opn/-/opn-5.5.0.tgz", - "integrity": "sha512-PqHpggC9bLV0VeWcdKhkpxY+3JTzetLSqTCWL/z/tFIbI6G8JCjondXklT1JinczLz2Xib62sSp0T/gKT4KksA==", "dev": true, "requires": { "is-wsl": "^1.1.0" @@ -25613,16 +21910,12 @@ "dependencies": { "is-wsl": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", - "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=", "dev": true } } }, "ora": { "version": "5.3.0", - "resolved": "https://registry.npmjs.org/ora/-/ora-5.3.0.tgz", - "integrity": "sha512-zAKMgGXUim0Jyd6CXK9lraBnD3H5yPGBPPOkC23a2BG6hsm4Zu6OQSjQuEtV0BHDf4aKHcUFvJiGRrFuW3MG8g==", "dev": true, "requires": { "bl": "^4.0.3", @@ -25635,25 +21928,15 @@ "wcwidth": "^1.0.1" }, "dependencies": { - "ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", - "dev": true - }, "ansi-styles": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "requires": { "color-convert": "^2.0.1" } }, "chalk": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", - "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", + "version": "4.1.1", "dev": true, "requires": { "ansi-styles": "^4.1.0", @@ -25662,8 +21945,6 @@ }, "color-convert": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, "requires": { "color-name": "~1.1.4" @@ -25671,29 +21952,14 @@ }, "color-name": { "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, "has-flag": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true }, - "strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.0" - } - }, "supports-color": { "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "requires": { "has-flag": "^4.0.0" @@ -25703,8 +21969,6 @@ }, "original": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/original/-/original-1.0.2.tgz", - "integrity": "sha512-hyBVl6iqqUOJ8FqRe+l/gS8H+kKYjrEndd5Pm1MfBtsEKA038HkkdbAl/72EAXGyonD/PFsvmVG+EvcIpliMBg==", "dev": true, "requires": { "url-parse": "^1.4.3" @@ -25712,42 +21976,41 @@ }, "os-browserify": { "version": "0.3.0", - "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz", - "integrity": "sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc=", "dev": true }, "os-tmpdir": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", "dev": true }, "p-finally": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", - "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", "dev": true }, "p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "version": "3.1.0", + "dev": true, "requires": { - "p-try": "^2.0.0" + "yocto-queue": "^0.1.0" } }, "p-locate": { - "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==", + "version": "4.1.0", + "dev": true, "requires": { - "p-limit": "^2.0.0" + "p-limit": "^2.2.0" + }, + "dependencies": { + "p-limit": { + "version": "2.3.0", + "dev": true, + "requires": { + "p-try": "^2.0.0" + } + } } }, "p-map": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", - "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", "dev": true, "requires": { "aggregate-error": "^3.0.0" @@ -25755,22 +22018,22 @@ }, "p-retry": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-3.0.1.tgz", - "integrity": "sha512-XE6G4+YTTkT2a0UWb2kjZe8xNwf8bIbnqpc/IS/idOBVhyves0mK5OJgeocjx7q5pvX/6m23xuzVPYT1uGM73w==", "dev": true, "requires": { "retry": "^0.12.0" + }, + "dependencies": { + "retry": { + "version": "0.12.0", + "dev": true + } } }, "p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==" + "version": "2.2.0" }, "pacote": { "version": "11.2.4", - "resolved": "https://registry.npmjs.org/pacote/-/pacote-11.2.4.tgz", - "integrity": "sha512-GfTeVQGJ6WyBQbQD4t3ocHbyOmTQLmWjkCKSZPmKiGFKYKNUaM5U2gbLzUW8WG1XmS9yQFnsTFA0k3o1+q4klQ==", "dev": true, "requires": { "@npmcli/git": "^2.0.1", @@ -25792,26 +22055,14 @@ "rimraf": "^3.0.2", "ssri": "^8.0.0", "tar": "^6.1.0" - }, - "dependencies": { - "mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "dev": true - } } }, "pako": { "version": "1.0.11", - "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", - "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==", "dev": true }, "parallel-transform": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/parallel-transform/-/parallel-transform-1.2.0.tgz", - "integrity": "sha512-P2vSmIu38uIlvdcU7fDkyrxj33gTUy/ABO5ZUbGowxNCopBq/OoD42bP4UmMrJoPyk4Uqf0mu3mtWBhHCZD8yg==", "dev": true, "requires": { "cyclist": "^1.0.1", @@ -25821,14 +22072,10 @@ "dependencies": { "isarray": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", "dev": true }, "readable-stream": { "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", "dev": true, "requires": { "core-util-is": "~1.0.0", @@ -25840,16 +22087,8 @@ "util-deprecate": "~1.0.1" } }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, "string_decoder": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "dev": true, "requires": { "safe-buffer": "~5.1.0" @@ -25859,25 +22098,13 @@ }, "parent-module": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", - "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", "dev": true, "requires": { "callsites": "^3.0.0" - }, - "dependencies": { - "callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "dev": true - } } }, "parse-asn1": { "version": "5.1.6", - "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.6.tgz", - "integrity": "sha512-RnZRo1EPU6JBnra2vGHj0yhp6ebyjBZpmUCLHWiFhxlzvBCCpAuZ7elsBp1PVAbQN0/04VD/19rfzlBSwLstMw==", "dev": true, "requires": { "asn1.js": "^5.2.0", @@ -25888,872 +22115,663 @@ } }, "parse-json": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", + "version": "5.2.0", "dev": true, "requires": { + "@babel/code-frame": "^7.0.0", "error-ex": "^1.3.1", - "json-parse-better-errors": "^1.0.1" + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" } }, - "parse5": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", - "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==", + "parse-node-version": { + "version": "1.0.1", "dev": true }, + "parse5": { + "version": "3.0.3", + "dev": true, + "requires": { + "@types/node": "*" + } + }, "parse5-html-rewriting-stream": { "version": "6.0.1", - "resolved": "https://registry.npmjs.org/parse5-html-rewriting-stream/-/parse5-html-rewriting-stream-6.0.1.tgz", - "integrity": "sha512-vwLQzynJVEfUlURxgnf51yAJDQTtVpNyGD8tKi2Za7m+akukNHxCcUQMAa/mUGLhCeicFdpy7Tlvj8ZNKadprg==", "dev": true, "requires": { "parse5": "^6.0.1", "parse5-sax-parser": "^6.0.1" + }, + "dependencies": { + "parse5": { + "version": "6.0.1", + "dev": true + } + } + }, + "parse5-htmlparser2-tree-adapter": { + "version": "6.0.1", + "dev": true, + "requires": { + "parse5": "^6.0.1" + }, + "dependencies": { + "parse5": { + "version": "6.0.1", + "dev": true + } } }, "parse5-sax-parser": { "version": "6.0.1", - "resolved": "https://registry.npmjs.org/parse5-sax-parser/-/parse5-sax-parser-6.0.1.tgz", - "integrity": "sha512-kXX+5S81lgESA0LsDuGjAlBybImAChYRMT+/uKCEXFBFOeEhS52qUCydGhU3qLRD8D9DVjaUo821WK7DM4iCeg==", "dev": true, "requires": { "parse5": "^6.0.1" + }, + "dependencies": { + "parse5": { + "version": "6.0.1", + "dev": true + } } }, "parseurl": { "version": "1.3.3", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", - "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", "dev": true }, "pascalcase": { "version": "0.1.1", - "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", - "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=", "dev": true }, "patch-db-client": { - "version": "file:../../patch-db-client", + "version": "file:../../patch-db-client" + }, + "path-browserify": { + "version": "0.0.1", + "dev": true + }, + "path-dirname": { + "version": "1.0.2", + "dev": true + }, + "path-exists": { + "version": "4.0.0", + "dev": true + }, + "path-is-absolute": { + "version": "1.0.1", + "dev": true + }, + "path-is-inside": { + "version": "1.0.2", + "dev": true + }, + "path-key": { + "version": "3.1.1", + "dev": true + }, + "path-parse": { + "version": "1.0.7", + "dev": true + }, + "path-to-regexp": { + "version": "0.1.7", + "dev": true + }, + "path-type": { + "version": "4.0.0", + "dev": true + }, + "pbkdf2": { + "version": "3.1.2", + "dev": true, "requires": { - "axios": "^0.21.1", - "fast-json-patch": "^3.0.0-1", - "jsonpointer": "^4.1.0", - "mobx": "^6.1.4", - "mobx-utils": "^6.0.3", - "rxjs": "^6.6.3", - "rxjs-observe": "^2.1.5", - "uuid": "^8.3.2" + "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": { + "version": "2.1.0", + "dev": true + }, + "picomatch": { + "version": "2.3.0", + "dev": true + }, + "pify": { + "version": "2.3.0", + "dev": true + }, + "pinkie": { + "version": "2.0.4", + "dev": true + }, + "pinkie-promise": { + "version": "2.0.1", + "dev": true, + "requires": { + "pinkie": "^2.0.0" + } + }, + "pkg-dir": { + "version": "4.2.0", + "dev": true, + "requires": { + "find-up": "^4.0.0" + } + }, + "pngjs": { + "version": "3.4.0" + }, + "pnp-webpack-plugin": { + "version": "1.6.4", + "dev": true, + "requires": { + "ts-pnp": "^1.1.6" + } + }, + "portfinder": { + "version": "1.0.28", + "dev": true, + "requires": { + "async": "^2.6.2", + "debug": "^3.1.1", + "mkdirp": "^0.5.5" }, "dependencies": { - "@types/chai": { - "version": "4.2.14", - "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.2.14.tgz", - "integrity": "sha512-G+ITQPXkwTrslfG5L/BksmbLUA0M1iybEsmCWPqzSxsRRhJZimBKJkoMi8fr/CPygPTj4zO5pJH7I2/cm9M7SQ==" - }, - "@types/chai-string": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/@types/chai-string/-/chai-string-1.4.2.tgz", - "integrity": "sha512-ld/1hV5qcPRGuwlPdvRfvM3Ka/iofOk2pH4VkasK4b1JJP1LjNmWWn0LsISf6RRzyhVOvs93rb9tM09e+UuF8Q==", + "debug": { + "version": "3.2.7", + "dev": true, "requires": { - "@types/chai": "*" + "ms": "^2.1.1" } }, - "@types/mocha": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-8.2.0.tgz", - "integrity": "sha512-/Sge3BymXo4lKc31C8OINJgXLaw+7vL1/L1pGiBNpGrBiT8FQiaFpSYV0uhTaG4y78vcMBTMFsWaHDvuD+xGzQ==" - }, - "@types/uuid": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-8.3.0.tgz", - "integrity": "sha512-eQ9qFW/fhfGJF8WKHGEHZEyVWfZxrT+6CLIJGBcZPfxUh/+BnEj+UCGYMlr9qZuX/2AltsvwrGqp0LhEW8D0zQ==" - }, - "@ungap/promise-all-settled": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz", - "integrity": "sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==" - }, - "ansi-colors": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", - "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==" + "mkdirp": { + "version": "0.5.5", + "dev": true, + "requires": { + "minimist": "^1.2.5" + } + } + } + }, + "posix-character-classes": { + "version": "0.1.1", + "dev": true + }, + "postcss": { + "version": "8.2.15", + "dev": true, + "requires": { + "colorette": "^1.2.2", + "nanoid": "^3.1.23", + "source-map": "^0.6.1" + }, + "dependencies": { + "colorette": { + "version": "1.2.2", + "dev": true }, + "source-map": { + "version": "0.6.1", + "dev": true + } + } + }, + "postcss-calc": { + "version": "8.0.0", + "dev": true, + "requires": { + "postcss-selector-parser": "^6.0.2", + "postcss-value-parser": "^4.0.2" + } + }, + "postcss-colormin": { + "version": "5.2.0", + "dev": true, + "requires": { + "browserslist": "^4.16.6", + "caniuse-api": "^3.0.0", + "colord": "^2.0.1", + "postcss-value-parser": "^4.1.0" + } + }, + "postcss-convert-values": { + "version": "5.0.1", + "dev": true, + "requires": { + "postcss-value-parser": "^4.1.0" + } + }, + "postcss-discard-comments": { + "version": "5.0.1", + "dev": true, + "requires": {} + }, + "postcss-discard-duplicates": { + "version": "5.0.1", + "dev": true, + "requires": {} + }, + "postcss-discard-empty": { + "version": "5.0.1", + "dev": true, + "requires": {} + }, + "postcss-discard-overridden": { + "version": "5.0.1", + "dev": true, + "requires": {} + }, + "postcss-import": { + "version": "14.0.0", + "dev": true, + "requires": { + "postcss-value-parser": "^4.0.0", + "read-cache": "^1.0.0", + "resolve": "^1.1.7" + } + }, + "postcss-loader": { + "version": "4.2.0", + "dev": true, + "requires": { + "cosmiconfig": "^7.0.0", + "klona": "^2.0.4", + "loader-utils": "^2.0.0", + "schema-utils": "^3.0.0", + "semver": "^7.3.4" + }, + "dependencies": { + "schema-utils": { + "version": "3.1.0", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.7", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + } + } + } + }, + "postcss-merge-longhand": { + "version": "5.0.2", + "dev": true, + "requires": { + "css-color-names": "^1.0.1", + "postcss-value-parser": "^4.1.0", + "stylehacks": "^5.0.1" + } + }, + "postcss-merge-rules": { + "version": "5.0.2", + "dev": true, + "requires": { + "browserslist": "^4.16.6", + "caniuse-api": "^3.0.0", + "cssnano-utils": "^2.0.1", + "postcss-selector-parser": "^6.0.5", + "vendors": "^1.0.3" + } + }, + "postcss-minify-font-values": { + "version": "5.0.1", + "dev": true, + "requires": { + "postcss-value-parser": "^4.1.0" + } + }, + "postcss-minify-gradients": { + "version": "5.0.1", + "dev": true, + "requires": { + "cssnano-utils": "^2.0.1", + "is-color-stop": "^1.1.0", + "postcss-value-parser": "^4.1.0" + } + }, + "postcss-minify-params": { + "version": "5.0.1", + "dev": true, + "requires": { + "alphanum-sort": "^1.0.2", + "browserslist": "^4.16.0", + "cssnano-utils": "^2.0.1", + "postcss-value-parser": "^4.1.0", + "uniqs": "^2.0.0" + } + }, + "postcss-minify-selectors": { + "version": "5.1.0", + "dev": true, + "requires": { + "alphanum-sort": "^1.0.2", + "postcss-selector-parser": "^6.0.5" + } + }, + "postcss-modules-extract-imports": { + "version": "3.0.0", + "dev": true, + "requires": {} + }, + "postcss-modules-local-by-default": { + "version": "4.0.0", + "dev": true, + "requires": { + "icss-utils": "^5.0.0", + "postcss-selector-parser": "^6.0.2", + "postcss-value-parser": "^4.1.0" + } + }, + "postcss-modules-scope": { + "version": "3.0.0", + "dev": true, + "requires": { + "postcss-selector-parser": "^6.0.4" + } + }, + "postcss-modules-values": { + "version": "4.0.0", + "dev": true, + "requires": { + "icss-utils": "^5.0.0" + } + }, + "postcss-normalize-charset": { + "version": "5.0.1", + "dev": true, + "requires": {} + }, + "postcss-normalize-display-values": { + "version": "5.0.1", + "dev": true, + "requires": { + "cssnano-utils": "^2.0.1", + "postcss-value-parser": "^4.1.0" + } + }, + "postcss-normalize-positions": { + "version": "5.0.1", + "dev": true, + "requires": { + "postcss-value-parser": "^4.1.0" + } + }, + "postcss-normalize-repeat-style": { + "version": "5.0.1", + "dev": true, + "requires": { + "cssnano-utils": "^2.0.1", + "postcss-value-parser": "^4.1.0" + } + }, + "postcss-normalize-string": { + "version": "5.0.1", + "dev": true, + "requires": { + "postcss-value-parser": "^4.1.0" + } + }, + "postcss-normalize-timing-functions": { + "version": "5.0.1", + "dev": true, + "requires": { + "cssnano-utils": "^2.0.1", + "postcss-value-parser": "^4.1.0" + } + }, + "postcss-normalize-unicode": { + "version": "5.0.1", + "dev": true, + "requires": { + "browserslist": "^4.16.0", + "postcss-value-parser": "^4.1.0" + } + }, + "postcss-normalize-url": { + "version": "5.0.2", + "dev": true, + "requires": { + "is-absolute-url": "^3.0.3", + "normalize-url": "^6.0.1", + "postcss-value-parser": "^4.1.0" + } + }, + "postcss-normalize-whitespace": { + "version": "5.0.1", + "dev": true, + "requires": { + "postcss-value-parser": "^4.1.0" + } + }, + "postcss-ordered-values": { + "version": "5.0.2", + "dev": true, + "requires": { + "cssnano-utils": "^2.0.1", + "postcss-value-parser": "^4.1.0" + } + }, + "postcss-reduce-initial": { + "version": "5.0.1", + "dev": true, + "requires": { + "browserslist": "^4.16.0", + "caniuse-api": "^3.0.0" + } + }, + "postcss-reduce-transforms": { + "version": "5.0.1", + "dev": true, + "requires": { + "cssnano-utils": "^2.0.1", + "postcss-value-parser": "^4.1.0" + } + }, + "postcss-selector-parser": { + "version": "6.0.6", + "dev": true, + "requires": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + } + }, + "postcss-svgo": { + "version": "5.0.2", + "dev": true, + "requires": { + "postcss-value-parser": "^4.1.0", + "svgo": "^2.3.0" + } + }, + "postcss-unique-selectors": { + "version": "5.0.1", + "dev": true, + "requires": { + "alphanum-sort": "^1.0.2", + "postcss-selector-parser": "^6.0.5", + "uniqs": "^2.0.0" + } + }, + "postcss-value-parser": { + "version": "4.1.0", + "dev": true + }, + "pretty-bytes": { + "version": "5.6.0", + "dev": true + }, + "process": { + "version": "0.11.10", + "dev": true + }, + "process-nextick-args": { + "version": "2.0.1", + "dev": true + }, + "promise-inflight": { + "version": "1.0.1", + "dev": true + }, + "promise-retry": { + "version": "1.1.1", + "dev": true, + "requires": { + "err-code": "^1.0.0", + "retry": "^0.10.0" + } + }, + "proxy-addr": { + "version": "2.0.7", + "dev": true, + "requires": { + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" + } + }, + "prr": { + "version": "1.0.1", + "dev": true + }, + "psl": { + "version": "1.8.0", + "dev": true + }, + "public-encrypt": { + "version": "4.0.3", + "dev": true, + "requires": { + "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" + }, + "dependencies": { + "bn.js": { + "version": "4.12.0", + "dev": true + } + } + }, + "pump": { + "version": "3.0.0", + "dev": true, + "requires": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "pumpify": { + "version": "1.5.1", + "dev": true, + "requires": { + "duplexify": "^3.6.0", + "inherits": "^2.0.3", + "pump": "^2.0.0" + }, + "dependencies": { + "pump": { + "version": "2.0.1", + "dev": true, + "requires": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + } + } + }, + "punycode": { + "version": "2.1.1" + }, + "qrcode": { + "version": "1.4.2", + "requires": { + "dijkstrajs": "^1.0.1", + "isarray": "^2.0.1", + "pngjs": "^3.3.0", + "yargs": "^13.2.4" + }, + "dependencies": { "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=" - }, - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "requires": { - "color-convert": "^2.0.1" - } - }, - "anymatch": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.1.tgz", - "integrity": "sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg==", - "requires": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - } - }, - "arg": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", - "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==" - }, - "argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "requires": { - "sprintf-js": "~1.0.2" - } - }, - "assertion-error": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", - "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==" - }, - "axios": { - "version": "0.21.1", - "resolved": "https://registry.npmjs.org/axios/-/axios-0.21.1.tgz", - "integrity": "sha512-dKQiRHxGD9PPRIUNIWvZhPTPpl1rf/OxTYKsqKUDjBwYylTvV7SjSHJb9ratfyzM6wCdLCOYLzs73qpg5c4iGA==", - "requires": { - "follow-redirects": "^1.10.0" - } - }, - "balanced-match": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", - "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" - }, - "binary-extensions": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", - "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==" - }, - "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "requires": { - "fill-range": "^7.0.1" - } - }, - "browser-stdout": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", - "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==" - }, - "buffer-from": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", - "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==" + "version": "4.1.0" }, "camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==" - }, - "chai": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/chai/-/chai-4.2.0.tgz", - "integrity": "sha512-XQU3bhBukrOsQCuwZndwGcCVQHyZi53fQ6Ys1Fym7E4olpIqqZZhhoFJoaKVvV17lWQoXYwgWN2nF5crA8J2jw==", - "requires": { - "assertion-error": "^1.1.0", - "check-error": "^1.0.2", - "deep-eql": "^3.0.1", - "get-func-name": "^2.0.0", - "pathval": "^1.1.0", - "type-detect": "^4.0.5" - } - }, - "chai-string": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/chai-string/-/chai-string-1.5.0.tgz", - "integrity": "sha512-sydDC3S3pNAQMYwJrs6dQX0oBQ6KfIPuOZ78n7rocW0eJJlsHPh2t3kwW7xfwYA/1Bf6/arGtSUo16rxR2JFlw==" - }, - "chalk": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", - "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "check-error": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz", - "integrity": "sha1-V00xLt2Iu13YkS6Sht1sCu1KrII=" - }, - "chokidar": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.4.3.tgz", - "integrity": "sha512-DtM3g7juCXQxFVSNPNByEC2+NImtBuxQQvWlHunpJIS5Ocr0lG306cC7FCi7cEA0fzmybPUIl4txBIobk1gGOQ==", - "requires": { - "anymatch": "~3.1.1", - "braces": "~3.0.2", - "fsevents": "~2.1.2", - "glob-parent": "~5.1.0", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.5.0" - } + "version": "5.3.1" }, "cliui": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", - "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", "requires": { "string-width": "^3.1.0", "strip-ansi": "^5.2.0", "wrap-ansi": "^5.1.0" - }, - "dependencies": { - "ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==" - }, - "string-width": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", - "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", - "requires": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" - } - }, - "strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "requires": { - "ansi-regex": "^4.1.0" - } - } } }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" - }, - "create-require": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", - "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==" - }, - "debug": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.2.0.tgz", - "integrity": "sha512-IX2ncY78vDTjZMFUdmsvIRFY2Cf4FnD0wRs+nQwJU8Lu99/tPFdb0VybiiMTPe3I6rQmwsqQqRBvxU+bZ/I8sg==", - "requires": { - "ms": "2.1.2" - } - }, - "decamelize": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=" - }, - "deep-eql": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-3.0.1.tgz", - "integrity": "sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw==", - "requires": { - "type-detect": "^4.0.0" - } - }, - "diff": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", - "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==" - }, "emoji-regex": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", - "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==" - }, - "escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==" - }, - "esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==" - }, - "fast-json-patch": { - "version": "3.0.0-1", - "resolved": "https://registry.npmjs.org/fast-json-patch/-/fast-json-patch-3.0.0-1.tgz", - "integrity": "sha512-6pdFb07cknxvPzCeLsFHStEy+MysPJPgZQ9LbQ/2O67unQF93SNqfdSqnPPl71YMHX+AD8gbl7iuoGFzHEdDuw==" - }, - "fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "requires": { - "to-regex-range": "^5.0.1" - } + "version": "7.0.3" }, "find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "version": "3.0.0", "requires": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" + "locate-path": "^3.0.0" } }, - "flat": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", - "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==" - }, - "follow-redirects": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.13.2.tgz", - "integrity": "sha512-6mPTgLxYm3r6Bkkg0vNM0HTjfGrOEtsfbhagQvbxDEsEkpNhw582upBaoRZylzen6krEmxXJgt9Ju6HiI4O7BA==" - }, - "fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" - }, - "fsevents": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.1.3.tgz", - "integrity": "sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ==", - "optional": true - }, - "get-caller-file": { - "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-func-name": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.0.tgz", - "integrity": "sha1-6td0q+5y4gQJQzoGY2YCPdaIekE=" - }, - "glob": { - "version": "7.1.6", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", - "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", - "requires": { - "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-parent": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.1.tgz", - "integrity": "sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ==", - "requires": { - "is-glob": "^4.0.1" - } - }, - "growl": { - "version": "1.10.5", - "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz", - "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==" - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" - }, - "he": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", - "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==" - }, - "inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" - }, - "is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "requires": { - "binary-extensions": "^2.0.0" - } - }, - "is-extglob": { - "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": { - "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-glob": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", - "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", - "requires": { - "is-extglob": "^2.1.1" - } - }, - "is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==" - }, - "is-plain-obj": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", - "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==" - }, - "isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=" - }, - "js-yaml": { - "version": "3.14.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.0.tgz", - "integrity": "sha512-/4IbIeHcD9VMHFqDR/gQ7EdZdLimOvW2DdcxFjdyyZ9NsbS+ccrXqVWDtab/lRl5AlUqmpBx8EhPaWR+OtY17A==", - "requires": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - } - }, - "jsonpointer": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/jsonpointer/-/jsonpointer-4.1.0.tgz", - "integrity": "sha512-CXcRvMyTlnR53xMcKnuMzfCA5i/nfblTnnr74CZb6C4vG39eu6w51t7nKmU5MfLfbTgGItliNyjO/ciNPDqClg==" + "version": "2.0.0" }, "locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "requires": { - "p-locate": "^5.0.0" - } - }, - "log-symbols": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.0.0.tgz", - "integrity": "sha512-FN8JBzLx6CzeMrB0tg6pqlGU1wCrXW+ZXGH481kfsBqer0hToTIiHdjH4Mq8xJUbvATujKCvaREGWpGUionraA==", - "requires": { - "chalk": "^4.0.0" - } - }, - "make-error": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", - "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==" - }, - "minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "mobx": { - "version": "6.1.4", - "resolved": "https://registry.npmjs.org/mobx/-/mobx-6.1.4.tgz", - "integrity": "sha512-DorvGl+ssJ9i5Sef90XzcIuOBMa2kWSC+PidTLHtgBX4f1bXOd+NKtujSjaRnQMDLTRkCzfJEFcC08hEjzCVaA==" - }, - "mobx-utils": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/mobx-utils/-/mobx-utils-6.0.3.tgz", - "integrity": "sha512-dNtwCe6g+Gv5BEzh6lMtGhrUM6bnEPHV3m5cNLCTaH/7t0c4KyRaV0HHcsuLQE7lBC8x3SZXo7hmliLJoOAL9A==" - }, - "mocha": { - "version": "8.2.1", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-8.2.1.tgz", - "integrity": "sha512-cuLBVfyFfFqbNR0uUKbDGXKGk+UDFe6aR4os78XIrMQpZl/nv7JYHcvP5MFIAb374b2zFXsdgEGwmzMtP0Xg8w==", - "requires": { - "@ungap/promise-all-settled": "1.1.2", - "ansi-colors": "4.1.1", - "browser-stdout": "1.3.1", - "chokidar": "3.4.3", - "debug": "4.2.0", - "diff": "4.0.2", - "escape-string-regexp": "4.0.0", - "find-up": "5.0.0", - "glob": "7.1.6", - "growl": "1.10.5", - "he": "1.2.0", - "js-yaml": "3.14.0", - "log-symbols": "4.0.0", - "minimatch": "3.0.4", - "ms": "2.1.2", - "nanoid": "3.1.12", - "serialize-javascript": "5.0.1", - "strip-json-comments": "3.1.1", - "supports-color": "7.2.0", - "which": "2.0.2", - "wide-align": "1.1.3", - "workerpool": "6.0.2", - "yargs": "13.3.2", - "yargs-parser": "13.1.2", - "yargs-unparser": "2.0.0" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - }, - "nanoid": { - "version": "3.1.12", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.12.tgz", - "integrity": "sha512-1qstj9z5+x491jfiC4Nelk+f8XBad7LN20PmyWINJEMRSf3wcAjAWysw1qaA8z6NSKe2sjq1hRSDpBH5paCb6A==" - }, - "normalize-path": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==" - }, - "once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", "requires": { - "wrappy": "1" + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" } }, "p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "version": "2.3.0", "requires": { - "yocto-queue": "^0.1.0" + "p-try": "^2.0.0" } }, "p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "version": "3.0.0", "requires": { - "p-limit": "^3.0.2" + "p-limit": "^2.0.0" } }, - "p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==" - }, "path-exists": { - "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": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" - }, - "pathval": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz", - "integrity": "sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==" - }, - "picomatch": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.2.tgz", - "integrity": "sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==" - }, - "randombytes": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", - "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", - "requires": { - "safe-buffer": "^5.1.0" - } - }, - "readdirp": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.5.0.tgz", - "integrity": "sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ==", - "requires": { - "picomatch": "^2.2.1" - } - }, - "require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=" - }, - "require-main-filename": { - "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==" - }, - "rxjs": { - "version": "6.6.3", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.3.tgz", - "integrity": "sha512-trsQc+xYYXZ3urjOiJOuCOa5N3jAZ3eiSpQB5hIT8zGlL2QfnHLJ2r7GMkBGuIausdJN1OneaI6gQlsqNHHmZQ==", - "requires": { - "tslib": "^1.9.0" - } - }, - "rxjs-observe": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/rxjs-observe/-/rxjs-observe-2.1.5.tgz", - "integrity": "sha512-jHZ2Aze8oTWG07KTM6vViQIQVl2DchkQe2XgUIddSMaRLD5EZhutLkAeID9/uxFPdY3hjipFrPVlbtKcCRhxZw==" - }, - "safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" - }, - "serialize-javascript": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-5.0.1.tgz", - "integrity": "sha512-SaaNal9imEO737H2c05Og0/8LUXG7EnsZyMa8MzkmuHoELfT6txuj0cMqRj6zfPKnmQ1yasR4PCJc8x+M4JSPA==", - "requires": { - "randombytes": "^2.1.0" - } - }, - "set-blocking": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=" - }, - "source-map-support": { - "version": "0.5.19", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz", - "integrity": "sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==", - "requires": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - } - } - }, - "sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=" + "version": "3.0.0" }, "string-width": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "version": "3.1.0", "requires": { + "emoji-regex": "^7.0.1", "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" + "strip-ansi": "^5.1.0" } }, "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "version": "5.2.0", "requires": { - "ansi-regex": "^3.0.0" + "ansi-regex": "^4.1.0" } }, - "strip-json-comments": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==" - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "requires": { - "has-flag": "^4.0.0" - } - }, - "to-regex-range": { - "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==", - "requires": { - "is-number": "^7.0.0" - } - }, - "ts-node": { - "version": "9.1.1", - "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-9.1.1.tgz", - "integrity": "sha512-hPlt7ZACERQGf03M253ytLY3dHbGNGrAq9qIHWUY9XHYl1z7wYngSr3OQ5xmui8o2AaxsONxIzjafLUiWBo1Fg==", - "requires": { - "arg": "^4.1.0", - "create-require": "^1.1.0", - "diff": "^4.0.1", - "make-error": "^1.1.1", - "source-map-support": "^0.5.17", - "yn": "3.1.1" - } - }, - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" - }, - "type-detect": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", - "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==" - }, - "typescript": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.1.3.tgz", - "integrity": "sha512-B3ZIOf1IKeH2ixgHhj6la6xdwR9QrLC5d1VKeCSY4tvkqhF2eqd9O7txNlS0PO3GrBAFIdr3L1ndNwteUbZLYg==" - }, - "uuid": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==" - }, - "which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "requires": { - "isexe": "^2.0.0" - } - }, - "which-module": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", - "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=" - }, - "wide-align": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz", - "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==", - "requires": { - "string-width": "^1.0.2 || 2" - } - }, - "workerpool": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.0.2.tgz", - "integrity": "sha512-DSNyvOpFKrNusaaUwk+ej6cBj1bmhLcBfj80elGk+ZIo5JSkq+unB1dLKEOcNfJDZgjGICfhQ0Q5TbP0PvF4+Q==" - }, "wrap-ansi": { "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==", "requires": { "ansi-styles": "^3.2.0", "string-width": "^3.0.0", "strip-ansi": "^5.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==" - }, - "ansi-styles": { - "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==", - "requires": { - "color-convert": "^1.9.0" - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" - }, - "string-width": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", - "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", - "requires": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" - } - }, - "strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "requires": { - "ansi-regex": "^4.1.0" - } - } } }, - "wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" - }, "y18n": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.1.tgz", - "integrity": "sha512-wNcy4NvjMYL8gogWWYAO7ZFWFfHcbdbE57tZO8e4cbpj8tfUcwrwqSl3ad8HxpYWCdXcJUCeKKZS62Av1affwQ==" + "version": "4.0.3" }, "yargs": { "version": "13.3.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz", - "integrity": "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==", "requires": { "cliui": "^5.0.0", "find-up": "^3.0.0", @@ -26765,1066 +22783,46 @@ "which-module": "^2.0.0", "y18n": "^4.0.0", "yargs-parser": "^13.1.2" - }, - "dependencies": { - "ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==" - }, - "find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "requires": { - "locate-path": "^3.0.0" - } - }, - "locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", - "requires": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - } - }, - "p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "requires": { - "p-try": "^2.0.0" - } - }, - "p-locate": { - "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==", - "requires": { - "p-limit": "^2.0.0" - } - }, - "path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=" - }, - "string-width": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", - "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", - "requires": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" - } - }, - "strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "requires": { - "ansi-regex": "^4.1.0" - } - } } }, "yargs-parser": { "version": "13.1.2", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz", - "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==", "requires": { "camelcase": "^5.0.0", "decamelize": "^1.2.0" } - }, - "yargs-unparser": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz", - "integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==", - "requires": { - "camelcase": "^6.0.0", - "decamelize": "^4.0.0", - "flat": "^5.0.2", - "is-plain-obj": "^2.1.0" - }, - "dependencies": { - "camelcase": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.2.0.tgz", - "integrity": "sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg==" - }, - "decamelize": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz", - "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==" - } - } - }, - "yn": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", - "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==" - }, - "yocto-queue": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==" } } }, - "path-browserify": { - "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==", - "dev": true - }, - "path-dirname": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", - "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=", - "dev": true - }, - "path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=" - }, - "path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", - "dev": true - }, - "path-is-inside": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", - "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=", - "dev": true - }, - "path-key": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", - "dev": true - }, - "path-parse": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", - "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==", - "dev": true - }, - "path-to-regexp": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", - "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=", - "dev": true - }, - "path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", - "dev": true - }, - "pbkdf2": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.1.tgz", - "integrity": "sha512-4Ejy1OPxi9f2tt1rRV7Go7zmfDQ+ZectEQz3VGUQhgq62HtIRPDyG/JtnwIxs6x3uNMwo2V7q1fMvKjb+Tnpqg==", - "requires": { - "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": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", - "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=", - "dev": true - }, - "picomatch": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.2.tgz", - "integrity": "sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==", - "dev": true - }, - "pify": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", - "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", - "dev": true - }, - "pinkie": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", - "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=", - "dev": true - }, - "pinkie-promise": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", - "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", - "dev": true, - "requires": { - "pinkie": "^2.0.0" - } - }, - "pkg-dir": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", - "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", - "dev": true, - "requires": { - "find-up": "^3.0.0" - } - }, - "pngjs": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/pngjs/-/pngjs-3.4.0.tgz", - "integrity": "sha512-NCrCHhWmnQklfH4MtJMRjZ2a8c80qXeMlQMv2uVp9ISJMTt562SbGd6n2oq0PaPgKm7Z6pL9E2UlLIhC+SHL3w==" - }, - "pnp-webpack-plugin": { - "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==", - "dev": true, - "requires": { - "ts-pnp": "^1.1.6" - } - }, - "portfinder": { - "version": "1.0.28", - "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.28.tgz", - "integrity": "sha512-Se+2isanIcEqf2XMHjyUKskczxbPH7dQnlMjXX6+dybayyHvAf/TCgyMRlzf/B6QDhAEFOGes0pzRo3by4AbMA==", - "dev": true, - "requires": { - "async": "^2.6.2", - "debug": "^3.1.1", - "mkdirp": "^0.5.5" - }, - "dependencies": { - "debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - } - } - }, - "posix-character-classes": { - "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=", - "dev": true - }, - "postcss": { - "version": "7.0.32", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.32.tgz", - "integrity": "sha512-03eXong5NLnNCD05xscnGKGDZ98CyzoqPSMjOe6SuoQY7Z2hIj0Ld1g/O/UQRuOle2aRtiIRDg9tDcTGAkLfKw==", - "dev": true, - "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - }, - "dependencies": { - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "postcss-calc": { - "version": "7.0.5", - "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-7.0.5.tgz", - "integrity": "sha512-1tKHutbGtLtEZF6PT4JSihCHfIVldU72mZ8SdZHIYriIZ9fh9k9aWSppaT8rHsyI3dX+KSR+W+Ix9BMY3AODrg==", - "dev": true, - "requires": { - "postcss": "^7.0.27", - "postcss-selector-parser": "^6.0.2", - "postcss-value-parser": "^4.0.2" - } - }, - "postcss-colormin": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-4.0.3.tgz", - "integrity": "sha512-WyQFAdDZpExQh32j0U0feWisZ0dmOtPl44qYmJKkq9xFWY3p+4qnRzCHeNrkeRhwPHz9bQ3mo0/yVkaply0MNw==", - "dev": true, - "requires": { - "browserslist": "^4.0.0", - "color": "^3.0.0", - "has": "^1.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" - }, - "dependencies": { - "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", - "dev": true - } - } - }, - "postcss-convert-values": { - "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==", - "dev": true, - "requires": { - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" - }, - "dependencies": { - "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", - "dev": true - } - } - }, - "postcss-discard-comments": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-4.0.2.tgz", - "integrity": "sha512-RJutN259iuRf3IW7GZyLM5Sw4GLTOH8FmsXBnv8Ab/Tc2k4SR4qbV4DNbyyY4+Sjo362SyDmW2DQ7lBSChrpkg==", - "dev": true, - "requires": { - "postcss": "^7.0.0" - } - }, - "postcss-discard-duplicates": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-4.0.2.tgz", - "integrity": "sha512-ZNQfR1gPNAiXZhgENFfEglF93pciw0WxMkJeVmw8eF+JZBbMD7jp6C67GqJAXVZP2BWbOztKfbsdmMp/k8c6oQ==", - "dev": true, - "requires": { - "postcss": "^7.0.0" - } - }, - "postcss-discard-empty": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-4.0.1.tgz", - "integrity": "sha512-B9miTzbznhDjTfjvipfHoqbWKwd0Mj+/fL5s1QOz06wufguil+Xheo4XpOnc4NqKYBCNqqEzgPv2aPBIJLox0w==", - "dev": true, - "requires": { - "postcss": "^7.0.0" - } - }, - "postcss-discard-overridden": { - "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==", - "dev": true, - "requires": { - "postcss": "^7.0.0" - } - }, - "postcss-import": { - "version": "12.0.1", - "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-12.0.1.tgz", - "integrity": "sha512-3Gti33dmCjyKBgimqGxL3vcV8w9+bsHwO5UrBawp796+jdardbcFl4RP5w/76BwNL7aGzpKstIfF9I+kdE8pTw==", - "dev": true, - "requires": { - "postcss": "^7.0.1", - "postcss-value-parser": "^3.2.3", - "read-cache": "^1.0.0", - "resolve": "^1.1.7" - }, - "dependencies": { - "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", - "dev": true - } - } - }, - "postcss-loader": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-4.0.4.tgz", - "integrity": "sha512-pntA9zIR14drQo84yGTjQJg1m7T0DkXR4vXYHBngiRZdJtEeCrojL6lOpqUanMzG375lIJbT4Yug85zC/AJWGw==", - "dev": true, - "requires": { - "cosmiconfig": "^7.0.0", - "klona": "^2.0.4", - "loader-utils": "^2.0.0", - "schema-utils": "^3.0.0", - "semver": "^7.3.2" - }, - "dependencies": { - "cosmiconfig": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.0.tgz", - "integrity": "sha512-pondGvTuVYDk++upghXJabWzL6Kxu6f26ljFw64Swq9v6sQPUL3EUlVDV56diOjpCayKihL6hVe8exIACU4XcA==", - "dev": true, - "requires": { - "@types/parse-json": "^4.0.0", - "import-fresh": "^3.2.1", - "parse-json": "^5.0.0", - "path-type": "^4.0.0", - "yaml": "^1.10.0" - } - }, - "import-fresh": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.2.2.tgz", - "integrity": "sha512-cTPNrlvJT6twpYy+YmKUKrTSjWFs3bjYjAhCwm+z4EOCubZxAuO+hHpRN64TqjEaYSHs7tJAE0w1CKMGmsG/lw==", - "dev": true, - "requires": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - } - }, - "parse-json": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.1.0.tgz", - "integrity": "sha512-+mi/lmVVNKFNVyLXV31ERiy2CY5E1/F6QtJFEzoChPRwwngMNXRDQ9GJ5WdE2Z2P4AujsOi0/+2qHID68KwfIQ==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.0.0", - "error-ex": "^1.3.1", - "json-parse-even-better-errors": "^2.3.0", - "lines-and-columns": "^1.1.6" - } - }, - "resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", - "dev": true - }, - "schema-utils": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.0.0.tgz", - "integrity": "sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA==", - "dev": true, - "requires": { - "@types/json-schema": "^7.0.6", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - } - } - } - }, - "postcss-merge-longhand": { - "version": "4.0.11", - "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-4.0.11.tgz", - "integrity": "sha512-alx/zmoeXvJjp7L4mxEMjh8lxVlDFX1gqWHzaaQewwMZiVhLo42TEClKaeHbRf6J7j82ZOdTJ808RtN0ZOZwvw==", - "dev": true, - "requires": { - "css-color-names": "0.0.4", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0", - "stylehacks": "^4.0.0" - }, - "dependencies": { - "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", - "dev": true - } - } - }, - "postcss-merge-rules": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-4.0.3.tgz", - "integrity": "sha512-U7e3r1SbvYzO0Jr3UT/zKBVgYYyhAz0aitvGIYOYK5CPmkNih+WDSsS5tvPrJ8YMQYlEMvsZIiqmn7HdFUaeEQ==", - "dev": true, - "requires": { - "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" - }, - "dependencies": { - "postcss-selector-parser": { - "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==", - "dev": true, - "requires": { - "dot-prop": "^5.2.0", - "indexes-of": "^1.0.1", - "uniq": "^1.0.1" - } - } - } - }, - "postcss-minify-font-values": { - "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==", - "dev": true, - "requires": { - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" - }, - "dependencies": { - "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", - "dev": true - } - } - }, - "postcss-minify-gradients": { - "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==", - "dev": true, - "requires": { - "cssnano-util-get-arguments": "^4.0.0", - "is-color-stop": "^1.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" - }, - "dependencies": { - "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", - "dev": true - } - } - }, - "postcss-minify-params": { - "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==", - "dev": true, - "requires": { - "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" - }, - "dependencies": { - "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", - "dev": true - } - } - }, - "postcss-minify-selectors": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-4.0.2.tgz", - "integrity": "sha512-D5S1iViljXBj9kflQo4YutWnJmwm8VvIsU1GeXJGiG9j8CIg9zs4voPMdQDUmIxetUOh60VilsNzCiAFTOqu3g==", - "dev": true, - "requires": { - "alphanum-sort": "^1.0.0", - "has": "^1.0.0", - "postcss": "^7.0.0", - "postcss-selector-parser": "^3.0.0" - }, - "dependencies": { - "postcss-selector-parser": { - "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==", - "dev": true, - "requires": { - "dot-prop": "^5.2.0", - "indexes-of": "^1.0.1", - "uniq": "^1.0.1" - } - } - } - }, - "postcss-modules-extract-imports": { - "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==", - "dev": true, - "requires": { - "postcss": "^7.0.5" - } - }, - "postcss-modules-local-by-default": { - "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==", - "dev": true, - "requires": { - "icss-utils": "^4.1.1", - "postcss": "^7.0.32", - "postcss-selector-parser": "^6.0.2", - "postcss-value-parser": "^4.1.0" - } - }, - "postcss-modules-scope": { - "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==", - "dev": true, - "requires": { - "postcss": "^7.0.6", - "postcss-selector-parser": "^6.0.0" - } - }, - "postcss-modules-values": { - "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==", - "dev": true, - "requires": { - "icss-utils": "^4.0.0", - "postcss": "^7.0.6" - } - }, - "postcss-normalize-charset": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-4.0.1.tgz", - "integrity": "sha512-gMXCrrlWh6G27U0hF3vNvR3w8I1s2wOBILvA87iNXaPvSNo5uZAMYsZG7XjCUf1eVxuPfyL4TJ7++SGZLc9A3g==", - "dev": true, - "requires": { - "postcss": "^7.0.0" - } - }, - "postcss-normalize-display-values": { - "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==", - "dev": true, - "requires": { - "cssnano-util-get-match": "^4.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" - }, - "dependencies": { - "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", - "dev": true - } - } - }, - "postcss-normalize-positions": { - "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==", - "dev": true, - "requires": { - "cssnano-util-get-arguments": "^4.0.0", - "has": "^1.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" - }, - "dependencies": { - "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", - "dev": true - } - } - }, - "postcss-normalize-repeat-style": { - "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==", - "dev": true, - "requires": { - "cssnano-util-get-arguments": "^4.0.0", - "cssnano-util-get-match": "^4.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" - }, - "dependencies": { - "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", - "dev": true - } - } - }, - "postcss-normalize-string": { - "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==", - "dev": true, - "requires": { - "has": "^1.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" - }, - "dependencies": { - "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", - "dev": true - } - } - }, - "postcss-normalize-timing-functions": { - "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==", - "dev": true, - "requires": { - "cssnano-util-get-match": "^4.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" - }, - "dependencies": { - "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", - "dev": true - } - } - }, - "postcss-normalize-unicode": { - "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==", - "dev": true, - "requires": { - "browserslist": "^4.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" - }, - "dependencies": { - "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", - "dev": true - } - } - }, - "postcss-normalize-url": { - "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==", - "dev": true, - "requires": { - "is-absolute-url": "^2.0.0", - "normalize-url": "^3.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" - }, - "dependencies": { - "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", - "dev": true - } - } - }, - "postcss-normalize-whitespace": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-4.0.2.tgz", - "integrity": "sha512-tO8QIgrsI3p95r8fyqKV+ufKlSHh9hMJqACqbv2XknufqEDhDvbguXGBBqxw9nsQoXWf0qOqppziKJKHMD4GtA==", - "dev": true, - "requires": { - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" - }, - "dependencies": { - "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", - "dev": true - } - } - }, - "postcss-ordered-values": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-4.1.2.tgz", - "integrity": "sha512-2fCObh5UanxvSxeXrtLtlwVThBvHn6MQcu4ksNT2tsaV2Fg76R2CV98W7wNSlX+5/pFwEyaDwKLLoEV7uRybAw==", - "dev": true, - "requires": { - "cssnano-util-get-arguments": "^4.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" - }, - "dependencies": { - "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", - "dev": true - } - } - }, - "postcss-reduce-initial": { - "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==", - "dev": true, - "requires": { - "browserslist": "^4.0.0", - "caniuse-api": "^3.0.0", - "has": "^1.0.0", - "postcss": "^7.0.0" - } - }, - "postcss-reduce-transforms": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-4.0.2.tgz", - "integrity": "sha512-EEVig1Q2QJ4ELpJXMZR8Vt5DQx8/mo+dGWSR7vWXqcob2gQLyQGsionYcGKATXvQzMPn6DSN1vTN7yFximdIAg==", - "dev": true, - "requires": { - "cssnano-util-get-match": "^4.0.0", - "has": "^1.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" - }, - "dependencies": { - "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", - "dev": true - } - } - }, - "postcss-selector-parser": { - "version": "6.0.4", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.4.tgz", - "integrity": "sha512-gjMeXBempyInaBqpp8gODmwZ52WaYsVOsfr4L4lDQ7n3ncD6mEyySiDtgzCT+NYC0mmeOLvtsF8iaEf0YT6dBw==", - "dev": true, - "requires": { - "cssesc": "^3.0.0", - "indexes-of": "^1.0.1", - "uniq": "^1.0.1", - "util-deprecate": "^1.0.2" - } - }, - "postcss-svgo": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-4.0.2.tgz", - "integrity": "sha512-C6wyjo3VwFm0QgBy+Fu7gCYOkCmgmClghO+pjcxvrcBKtiKt0uCF+hvbMO1fyv5BMImRK90SMb+dwUnfbGd+jw==", - "dev": true, - "requires": { - "is-svg": "^3.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0", - "svgo": "^1.0.0" - }, - "dependencies": { - "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", - "dev": true - } - } - }, - "postcss-unique-selectors": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-4.0.1.tgz", - "integrity": "sha512-+JanVaryLo9QwZjKrmJgkI4Fn8SBgRO6WXQBJi7KiAVPlmxikB5Jzc4EvXMT2H0/m0RjrVVm9rGNhZddm/8Spg==", - "dev": true, - "requires": { - "alphanum-sort": "^1.0.0", - "postcss": "^7.0.0", - "uniqs": "^2.0.0" - } - }, - "postcss-value-parser": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz", - "integrity": "sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ==", - "dev": true - }, - "process": { - "version": "0.11.10", - "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", - "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=", - "dev": true - }, - "process-nextick-args": { - "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==", - "dev": true - }, - "promise-inflight": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", - "integrity": "sha1-mEcocL8igTL8vdhoEputEsPAKeM=", - "dev": true - }, - "promise-retry": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/promise-retry/-/promise-retry-1.1.1.tgz", - "integrity": "sha1-ZznpaOMFHaIM5kl/srUPaRHfPW0=", - "dev": true, - "requires": { - "err-code": "^1.0.0", - "retry": "^0.10.0" - }, - "dependencies": { - "retry": { - "version": "0.10.1", - "resolved": "https://registry.npmjs.org/retry/-/retry-0.10.1.tgz", - "integrity": "sha1-52OI0heZLCUnUCQdPTlW/tmNj/Q=", - "dev": true - } - } - }, - "proxy-addr": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.6.tgz", - "integrity": "sha512-dh/frvCBVmSsDYzw6n926jv974gddhkFPfiN8hPOi30Wax25QZyZEGveluCgliBnqmuM+UJmBErbAUFIoDbjOw==", - "dev": true, - "requires": { - "forwarded": "~0.1.2", - "ipaddr.js": "1.9.1" - } - }, - "prr": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", - "integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY=", - "dev": true - }, - "psl": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz", - "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==", - "dev": true - }, - "public-encrypt": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz", - "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==", - "dev": true, - "requires": { - "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": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", - "dev": true, - "requires": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, - "pumpify": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-1.5.1.tgz", - "integrity": "sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==", - "dev": true, - "requires": { - "duplexify": "^3.6.0", - "inherits": "^2.0.3", - "pump": "^2.0.0" - }, - "dependencies": { - "pump": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz", - "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==", - "dev": true, - "requires": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - } - } - }, - "punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" - }, - "pushdata-bitcoin": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/pushdata-bitcoin/-/pushdata-bitcoin-1.0.1.tgz", - "integrity": "sha1-FZMdPNlnreUiBvUjqnMxrvfUOvc=", - "requires": { - "bitcoin-ops": "^1.3.0" - } - }, - "q": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", - "integrity": "sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=", - "dev": true - }, - "qrcode": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/qrcode/-/qrcode-1.4.2.tgz", - "integrity": "sha512-eR6RgxFYPDFH+zFLTJKtoNP/RlsHANQb52AUmQ2bGDPMuUw7jJb0F+DNEgx7qQGIElrbFxWYMc0/B91zLZPF9Q==", - "requires": { - "dijkstrajs": "^1.0.1", - "isarray": "^2.0.1", - "pngjs": "^3.3.0", - "yargs": "^13.2.4" - } - }, "qs": { "version": "6.7.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", - "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==", "dev": true }, "querystring": { "version": "0.2.0", - "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", - "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=", "dev": true }, "querystring-es3": { "version": "0.2.1", - "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz", - "integrity": "sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM=", "dev": true }, "querystringify": { "version": "2.2.0", - "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", - "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==", + "dev": true + }, + "queue-microtask": { + "version": "1.2.3", "dev": true }, "randombytes": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", - "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "dev": true, "requires": { "safe-buffer": "^5.1.0" } }, "randomfill": { "version": "1.0.4", - "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz", - "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==", "dev": true, "requires": { "randombytes": "^2.0.5", @@ -27833,43 +22831,20 @@ }, "range-parser": { "version": "1.2.1", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", - "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", "dev": true }, "raw-body": { "version": "2.4.0", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz", - "integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==", "dev": true, "requires": { "bytes": "3.1.0", "http-errors": "1.7.2", "iconv-lite": "0.4.24", "unpipe": "1.0.0" - }, - "dependencies": { - "bytes": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", - "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==", - "dev": true - }, - "iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "dev": true, - "requires": { - "safer-buffer": ">= 2.1.2 < 3" - } - } } }, "raw-loader": { "version": "4.0.2", - "resolved": "https://registry.npmjs.org/raw-loader/-/raw-loader-4.0.2.tgz", - "integrity": "sha512-ZnScIV3ag9A4wPX/ZayxL/jZH+euYb6FcUinPcgiQW0+UBtEv0O6Q3lGd3cqJ+GHH+rksEv3Pj99oxJ3u3VIKA==", "dev": true, "requires": { "loader-utils": "^2.0.0", @@ -27877,12 +22852,10 @@ }, "dependencies": { "schema-utils": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.0.0.tgz", - "integrity": "sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA==", + "version": "3.1.0", "dev": true, "requires": { - "@types/json-schema": "^7.0.6", + "@types/json-schema": "^7.0.7", "ajv": "^6.12.5", "ajv-keywords": "^3.5.2" } @@ -27891,25 +22864,13 @@ }, "read-cache": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", - "integrity": "sha1-5mTvMRYRZsl1HNvo28+GtftY93Q=", "dev": true, "requires": { "pify": "^2.3.0" - }, - "dependencies": { - "pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", - "dev": true - } } }, "read-package-json-fast": { "version": "1.2.2", - "resolved": "https://registry.npmjs.org/read-package-json-fast/-/read-package-json-fast-1.2.2.tgz", - "integrity": "sha512-39DbPJjkltEzfXJXB6D8/Ir3GFOU2YbSKa2HaB/Y3nKrc/zY+0XrALpID6/13ezWyzqvOHrBbR4t4cjQuTdBVQ==", "dev": true, "requires": { "json-parse-even-better-errors": "^2.3.0", @@ -27918,8 +22879,7 @@ }, "readable-stream": { "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dev": true, "requires": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", @@ -27927,9 +22887,7 @@ } }, "readdirp": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.5.0.tgz", - "integrity": "sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ==", + "version": "3.6.0", "dev": true, "requires": { "picomatch": "^2.2.1" @@ -27937,20 +22895,14 @@ }, "reflect-metadata": { "version": "0.1.13", - "resolved": "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.1.13.tgz", - "integrity": "sha512-Ts1Y/anZELhSsjMcU605fU9RE4Oi3p5ORujwbIKXfWa+0Zxs510Qrmrce5/Jowq3cHSZSJqBjypxmHarc+vEWg==", "dev": true }, "regenerate": { "version": "1.4.2", - "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", - "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==", "dev": true }, "regenerate-unicode-properties": { "version": "8.2.0", - "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-8.2.0.tgz", - "integrity": "sha512-F9DjY1vKLo/tPePDycuH3dn9H1OTPIkVD9Kz4LODu+F2C75mgjAJ7x/gwy6ZcSNRAAkhNlJSOHRe8k3p+K9WhA==", "dev": true, "requires": { "regenerate": "^1.4.0" @@ -27958,14 +22910,10 @@ }, "regenerator-runtime": { "version": "0.13.7", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz", - "integrity": "sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew==", "dev": true }, "regenerator-transform": { "version": "0.14.5", - "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.14.5.tgz", - "integrity": "sha512-eOf6vka5IO151Jfsw2NO9WpGX58W6wWmefK3I1zEGr0lOD0u8rwPaNqQL1aRxUaxLeKO3ArNh3VYg1KbaD+FFw==", "dev": true, "requires": { "@babel/runtime": "^7.8.4" @@ -27973,8 +22921,6 @@ }, "regex-not": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", - "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", "dev": true, "requires": { "extend-shallow": "^3.0.2", @@ -27983,45 +22929,18 @@ }, "regex-parser": { "version": "2.2.11", - "resolved": "https://registry.npmjs.org/regex-parser/-/regex-parser-2.2.11.tgz", - "integrity": "sha512-jbD/FT0+9MBU2XAZluI7w2OBs1RBi6p9M83nkoZayQXXU9e8Robt69FcZc7wU4eJD/YFTjn1JdCk3rbMJajz8Q==", "dev": true }, "regexp.prototype.flags": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.3.0.tgz", - "integrity": "sha512-2+Q0C5g951OlYlJz6yu5/M33IcsESLlLfsyIaLJaG4FA2r4yP8MvVMJUUP/fVBkSpbbbZlS5gynbEWLipiiXiQ==", + "version": "1.3.1", "dev": true, "requires": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.0-next.1" - }, - "dependencies": { - "es-abstract": { - "version": "1.17.7", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.7.tgz", - "integrity": "sha512-VBl/gnfcJ7OercKA9MVaegWsBHFjV492syMudcnQZvt/Dw8ezpcOHYZXa/J96O8vx+g4x65YKhxOwDUh63aS5g==", - "dev": true, - "requires": { - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.1", - "is-callable": "^1.2.2", - "is-regex": "^1.1.1", - "object-inspect": "^1.8.0", - "object-keys": "^1.1.1", - "object.assign": "^4.1.1", - "string.prototype.trimend": "^1.0.1", - "string.prototype.trimstart": "^1.0.1" - } - } + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" } }, "regexpu-core": { "version": "4.7.1", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.7.1.tgz", - "integrity": "sha512-ywH2VUraA44DZQuRKzARmw6S66mr48pQVva4LBeRhcOltJ6hExvWly5ZjFLYo67xbIxb6W1q4bAGtgfEl20zfQ==", "dev": true, "requires": { "regenerate": "^1.4.0", @@ -28034,14 +22953,10 @@ }, "regjsgen": { "version": "0.5.2", - "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.5.2.tgz", - "integrity": "sha512-OFFT3MfrH90xIW8OOSyUrk6QHD5E9JOTeGodiJeBS3J6IwlgzJMNE/1bZklWz5oTg+9dCMyEetclvCVXOPoN3A==", "dev": true }, "regjsparser": { - "version": "0.6.4", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.6.4.tgz", - "integrity": "sha512-64O87/dPDgfk8/RQqC4gkZoGyyWFIEUTTh80CU6CWuK5vkCGyekIx+oKcEIYtP/RAxSQltCZHCNu/mdd7fqlJw==", + "version": "0.6.9", "dev": true, "requires": { "jsesc": "~0.5.0" @@ -28049,34 +22964,24 @@ "dependencies": { "jsesc": { "version": "0.5.0", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", - "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=", "dev": true } } }, "remove-trailing-separator": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", - "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=", "dev": true }, "repeat-element": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.3.tgz", - "integrity": "sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g==", + "version": "1.1.4", "dev": true }, "repeat-string": { "version": "1.6.1", - "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", - "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", "dev": true }, "request": { "version": "2.88.2", - "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", - "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", "dev": true, "requires": { "aws-sign2": "~0.7.0", @@ -28103,38 +23008,26 @@ "dependencies": { "qs": { "version": "6.5.2", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", - "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==", "dev": true }, "uuid": { "version": "3.4.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", - "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", "dev": true } } }, "require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=" + "version": "2.1.1" }, "require-main-filename": { - "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==" + "version": "2.0.0" }, "requires-port": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", - "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=", "dev": true }, "resolve": { "version": "1.19.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.19.0.tgz", - "integrity": "sha512-rArEXAgsBG4UgRGcynxWIWKFvh/XZCcS8UJdHhwy91zwAvCZIbcs+vAbflgBnNjYMs/i/i+/Ux6IZhML1yPvxg==", "dev": true, "requires": { "is-core-module": "^2.1.0", @@ -28143,73 +23036,38 @@ }, "resolve-cwd": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-2.0.0.tgz", - "integrity": "sha1-AKn3OHVW4nA46uIyyqNypqWbZlo=", "dev": true, "requires": { "resolve-from": "^3.0.0" + }, + "dependencies": { + "resolve-from": { + "version": "3.0.0", + "dev": true + } } }, "resolve-from": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", - "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=", + "version": "4.0.0", "dev": true }, "resolve-url": { "version": "0.2.1", - "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", - "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=", "dev": true }, "resolve-url-loader": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/resolve-url-loader/-/resolve-url-loader-3.1.2.tgz", - "integrity": "sha512-QEb4A76c8Mi7I3xNKXlRKQSlLBwjUV/ULFMP+G7n3/7tJZ8MG5wsZ3ucxP1Jz8Vevn6fnJsxDx9cIls+utGzPQ==", + "version": "4.0.0", "dev": true, "requires": { - "adjust-sourcemap-loader": "3.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", + "adjust-sourcemap-loader": "^4.0.0", + "convert-source-map": "^1.7.0", + "loader-utils": "^2.0.0", + "postcss": "^7.0.35", "source-map": "0.6.1" }, "dependencies": { - "emojis-list": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-2.1.0.tgz", - "integrity": "sha1-TapNnbAPmBmIDHn6RXrlsJof04k=", - "dev": true - }, - "json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", - "dev": true, - "requires": { - "minimist": "^1.2.0" - } - }, - "loader-utils": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.2.3.tgz", - "integrity": "sha512-fkpz8ejdnEMG3s37wGL07iSBDg99O9D5yflE9RGNH3hRdx9SOwYfnGYdZOUIZitN8E+E2vkq3MUMYMvPYl5ZZA==", - "dev": true, - "requires": { - "big.js": "^5.2.2", - "emojis-list": "^2.0.0", - "json5": "^1.0.1" - } - }, "postcss": { - "version": "7.0.21", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.21.tgz", - "integrity": "sha512-uIFtJElxJo29QC753JzhidoAhvp/e/Exezkdhfmt8AymWT6/5B7W1WmponYWkHk2eg6sONyTch0A3nkMPun3SQ==", + "version": "7.0.36", "dev": true, "requires": { "chalk": "^2.4.2", @@ -28217,10 +23075,12 @@ "supports-color": "^6.1.0" } }, + "source-map": { + "version": "0.6.1", + "dev": true + }, "supports-color": { "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", "dev": true, "requires": { "has-flag": "^3.0.0" @@ -28230,8 +23090,6 @@ }, "restore-cursor": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", - "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", "dev": true, "requires": { "onetime": "^5.1.0", @@ -28240,62 +23098,26 @@ }, "ret": { "version": "0.1.15", - "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", - "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", "dev": true }, "retry": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", - "integrity": "sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs=", + "version": "0.10.1", "dev": true }, "reusify": { "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", - "dev": true - }, - "rework": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/rework/-/rework-1.0.1.tgz", - "integrity": "sha1-MIBqhBNCtUUQqkEQhQzUhTQUSqc=", - "dev": true, - "requires": { - "convert-source-map": "^0.3.3", - "css": "^2.0.0" - }, - "dependencies": { - "convert-source-map": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-0.3.5.tgz", - "integrity": "sha1-8dgClQr33SYxof6+BZZVDIarMZA=", - "dev": true - } - } - }, - "rework-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/rework-visit/-/rework-visit-1.0.0.tgz", - "integrity": "sha1-mUWygD8hni96ygCtuLyfZA+ELJo=", "dev": true }, "rgb-regex": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/rgb-regex/-/rgb-regex-1.0.1.tgz", - "integrity": "sha1-wODWiC3w4jviVKR16O3UGRX+rrE=", "dev": true }, "rgba-regex": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/rgba-regex/-/rgba-regex-1.0.0.tgz", - "integrity": "sha1-QzdOLiyglosO8VI0YLfXMP8i7rM=", "dev": true }, "rimraf": { "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", "dev": true, "requires": { "glob": "^7.1.3" @@ -28303,67 +23125,54 @@ }, "ripemd160": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", - "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", + "dev": true, "requires": { "hash-base": "^3.0.0", "inherits": "^2.0.1" } }, "rollup": { - "version": "2.32.1", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.32.1.tgz", - "integrity": "sha512-Op2vWTpvK7t6/Qnm1TTh7VjEZZkN8RWgf0DHbkKzQBwNf748YhXbozHVefqpPp/Fuyk/PQPAnYsBxAEtlMvpUw==", + "version": "2.38.4", "dev": true, "requires": { - "fsevents": "~2.1.2" + "fsevents": "~2.3.1" } }, "run-async": { "version": "2.4.1", - "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", - "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==", "dev": true }, "run-parallel": { - "version": "1.1.10", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.1.10.tgz", - "integrity": "sha512-zb/1OuZ6flOlH6tQyMPUrE3x3Ulxjlo9WIVXR4yVYi4H9UXQaeIsPbLn2R3O3vQCnDKkAl2qHiuocKKX4Tz/Sw==", - "dev": true + "version": "1.2.0", + "dev": true, + "requires": { + "queue-microtask": "^1.2.2" + } }, "run-queue": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/run-queue/-/run-queue-1.0.3.tgz", - "integrity": "sha1-6Eg5bwV9Ij8kOGkkYY4laUFh7Ec=", "dev": true, "requires": { "aproba": "^1.1.1" } }, "rxjs": { - "version": "6.6.3", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.3.tgz", - "integrity": "sha512-trsQc+xYYXZ3urjOiJOuCOa5N3jAZ3eiSpQB5hIT8zGlL2QfnHLJ2r7GMkBGuIausdJN1OneaI6gQlsqNHHmZQ==", + "version": "6.6.7", "requires": { "tslib": "^1.9.0" }, "dependencies": { "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + "version": "1.14.1" } } }, "safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" + "version": "5.1.2", + "dev": true }, "safe-regex": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", - "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", "dev": true, "requires": { "ret": "~0.1.10" @@ -28371,22 +23180,17 @@ }, "safer-buffer": { "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + "dev": true }, "sass": { - "version": "1.27.0", - "resolved": "https://registry.npmjs.org/sass/-/sass-1.27.0.tgz", - "integrity": "sha512-0gcrER56OkzotK/GGwgg4fPrKuiFlPNitO7eUJ18Bs+/NBlofJfMxmxqpqJxjae9vu0Wq8TZzrSyxZal00WDig==", + "version": "1.32.6", "dev": true, "requires": { "chokidar": ">=2.0.0 <4.0.0" } }, "sass-loader": { - "version": "10.0.5", - "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-10.0.5.tgz", - "integrity": "sha512-2LqoNPtKkZq/XbXNQ4C64GFEleSEHKv6NPSI+bMC/l+jpEXGJhiRYkAQToO24MR7NU4JRY2RpLpJ/gjo2Uf13w==", + "version": "10.1.1", "dev": true, "requires": { "klona": "^2.0.4", @@ -28397,12 +23201,10 @@ }, "dependencies": { "schema-utils": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.0.0.tgz", - "integrity": "sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA==", + "version": "3.1.0", "dev": true, "requires": { - "@types/json-schema": "^7.0.6", + "@types/json-schema": "^7.0.7", "ajv": "^6.12.5", "ajv-keywords": "^3.5.2" } @@ -28411,14 +23213,10 @@ }, "sax": { "version": "1.2.4", - "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", - "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", "dev": true }, "schema-utils": { "version": "2.7.1", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.1.tgz", - "integrity": "sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==", "dev": true, "requires": { "@types/json-schema": "^7.0.5", @@ -28428,29 +23226,24 @@ }, "select-hose": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz", - "integrity": "sha1-Yl2GWPhlr0Psliv8N2o3NZpJlMo=", "dev": true }, "selfsigned": { - "version": "1.10.8", - "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-1.10.8.tgz", - "integrity": "sha512-2P4PtieJeEwVgTU9QEcwIRDQ/mXJLX8/+I3ur+Pg16nS8oNbrGxEso9NyYWy8NAmXiNl4dlAp5MwoNeCWzON4w==", + "version": "1.10.11", "dev": true, "requires": { "node-forge": "^0.10.0" } }, "semver": { - "version": "7.3.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.2.tgz", - "integrity": "sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ==", - "dev": true + "version": "7.3.4", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } }, "semver-intersect": { "version": "1.4.0", - "resolved": "https://registry.npmjs.org/semver-intersect/-/semver-intersect-1.4.0.tgz", - "integrity": "sha512-d8fvGg5ycKAq0+I6nfWeCx6ffaWJCsBYU0H2Rq56+/zFePYfT8mXkB3tWBSjR5BerkHNZ5eTPIk1/LBYas35xQ==", "dev": true, "requires": { "semver": "^5.0.0" @@ -28458,16 +23251,12 @@ "dependencies": { "semver": { "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", "dev": true } } }, "send": { "version": "0.17.1", - "resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz", - "integrity": "sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==", "dev": true, "requires": { "debug": "2.6.9", @@ -28487,8 +23276,6 @@ "dependencies": { "debug": { "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dev": true, "requires": { "ms": "2.0.0" @@ -28496,24 +23283,18 @@ "dependencies": { "ms": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", "dev": true } } }, "ms": { "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", - "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", "dev": true } } }, "serialize-javascript": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-4.0.0.tgz", - "integrity": "sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==", + "version": "5.0.1", "dev": true, "requires": { "randombytes": "^2.1.0" @@ -28521,8 +23302,6 @@ }, "serve-index": { "version": "1.9.1", - "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz", - "integrity": "sha1-03aNabHn2C5c4FD/9bRTvqEqkjk=", "dev": true, "requires": { "accepts": "~1.3.4", @@ -28536,8 +23315,6 @@ "dependencies": { "debug": { "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dev": true, "requires": { "ms": "2.0.0" @@ -28545,8 +23322,6 @@ }, "http-errors": { "version": "1.6.3", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", - "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", "dev": true, "requires": { "depd": "~1.1.2", @@ -28557,28 +23332,20 @@ }, "inherits": { "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", "dev": true }, "ms": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", "dev": true }, "setprototypeof": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", - "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==", "dev": true } } }, "serve-static": { "version": "1.14.1", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz", - "integrity": "sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==", "dev": true, "requires": { "encodeurl": "~1.0.2", @@ -28588,14 +23355,10 @@ } }, "set-blocking": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=" + "version": "2.0.0" }, "set-value": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", - "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==", "dev": true, "requires": { "extend-shallow": "^2.0.1", @@ -28606,31 +23369,28 @@ "dependencies": { "extend-shallow": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, "requires": { "is-extendable": "^0.1.0" } + }, + "is-extendable": { + "version": "0.1.1", + "dev": true } } }, "setimmediate": { "version": "1.0.5", - "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", - "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=", "dev": true }, "setprototypeof": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", - "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==", "dev": true }, "sha.js": { "version": "2.4.11", - "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", - "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", + "dev": true, "requires": { "inherits": "^2.0.1", "safe-buffer": "^5.0.1" @@ -28638,61 +23398,32 @@ }, "shallow-clone": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", - "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", "dev": true, "requires": { "kind-of": "^6.0.2" } }, "shebang-command": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", - "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", + "version": "2.0.0", "dev": true, "requires": { - "shebang-regex": "^1.0.0" + "shebang-regex": "^3.0.0" } }, "shebang-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", - "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", + "version": "3.0.0", "dev": true }, "signal-exit": { "version": "3.0.3", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz", - "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==", "dev": true }, - "simple-swizzle": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", - "integrity": "sha1-pNprY1/8zMoz9w0Xy5JZLeleVXo=", - "dev": true, - "requires": { - "is-arrayish": "^0.3.1" - }, - "dependencies": { - "is-arrayish": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", - "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==", - "dev": true - } - } - }, "slash": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", "dev": true }, "slice-ansi": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", - "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", "dev": true, "requires": { "ansi-styles": "^4.0.0", @@ -28702,8 +23433,6 @@ "dependencies": { "ansi-styles": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "requires": { "color-convert": "^2.0.1" @@ -28711,8 +23440,6 @@ }, "color-convert": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, "requires": { "color-name": "~1.1.4" @@ -28720,28 +23447,16 @@ }, "color-name": { "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "is-fullwidth-code-point": { - "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==", "dev": true } } }, "smart-buffer": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.1.0.tgz", - "integrity": "sha512-iVICrxOzCynf/SNaBQCw34eM9jROU/s5rzIhpOvzhzuYHfJR/DhZfDkXiZSgKXfgv26HT3Yni3AV/DGw0cGnnw==", "dev": true }, "snapdragon": { "version": "0.8.2", - "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", - "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", "dev": true, "requires": { "base": "^0.11.1", @@ -28756,8 +23471,6 @@ "dependencies": { "debug": { "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dev": true, "requires": { "ms": "2.0.0" @@ -28765,8 +23478,6 @@ }, "define-property": { "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", "dev": true, "requires": { "is-descriptor": "^0.1.0" @@ -28774,31 +23485,83 @@ }, "extend-shallow": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, "requires": { "is-extendable": "^0.1.0" } }, + "is-accessor-descriptor": { + "version": "0.1.6", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-data-descriptor": { + "version": "0.1.4", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-descriptor": { + "version": "0.1.6", + "dev": true, + "requires": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + } + }, + "is-extendable": { + "version": "0.1.1", + "dev": true + }, + "kind-of": { + "version": "5.1.0", + "dev": true + }, "ms": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", "dev": true }, "source-map": { "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", "dev": true + }, + "source-map-resolve": { + "version": "0.5.3", + "dev": true, + "requires": { + "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" + } } } }, "snapdragon-node": { "version": "2.1.1", - "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", - "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", "dev": true, "requires": { "define-property": "^1.0.0", @@ -28808,48 +23571,15 @@ "dependencies": { "define-property": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", "dev": true, "requires": { "is-descriptor": "^1.0.0" } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } } } }, "snapdragon-util": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", - "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", "dev": true, "requires": { "kind-of": "^3.2.0" @@ -28857,8 +23587,6 @@ "dependencies": { "kind-of": { "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, "requires": { "is-buffer": "^1.1.5" @@ -28867,62 +23595,43 @@ } }, "sockjs": { - "version": "0.3.20", - "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.20.tgz", - "integrity": "sha512-SpmVOVpdq0DJc0qArhF3E5xsxvaiqGNb73XfgBpK1y3UD5gs8DSo8aCTsuT5pX8rssdc2NDIzANwP9eCAiSdTA==", + "version": "0.3.21", "dev": true, "requires": { - "faye-websocket": "^0.10.0", + "faye-websocket": "^0.11.3", "uuid": "^3.4.0", - "websocket-driver": "0.6.5" + "websocket-driver": "^0.7.4" }, "dependencies": { "uuid": { "version": "3.4.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", - "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", "dev": true } } }, "sockjs-client": { - "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==", + "version": "1.5.1", "dev": true, "requires": { - "debug": "^3.2.5", + "debug": "^3.2.6", "eventsource": "^1.0.7", - "faye-websocket": "~0.11.1", - "inherits": "^2.0.3", - "json3": "^3.3.2", - "url-parse": "^1.4.3" + "faye-websocket": "^0.11.3", + "inherits": "^2.0.4", + "json3": "^3.3.3", + "url-parse": "^1.5.1" }, "dependencies": { "debug": { "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", "dev": true, "requires": { "ms": "^2.1.1" } - }, - "faye-websocket": { - "version": "0.11.3", - "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.3.tgz", - "integrity": "sha512-D2y4bovYpzziGgbHYtGCMjlJM36vAl/y+xUyn1C+FVx8szd1E+86KwVw6XvYSzOP8iMpm1X0I4xJD+QtUb36OA==", - "dev": true, - "requires": { - "websocket-driver": ">=0.5.1" - } } } }, "socks": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/socks/-/socks-2.5.1.tgz", - "integrity": "sha512-oZCsJJxapULAYJaEYBSzMcz8m3jqgGrHaGhkmU/o/PQfFWYWxkAaA0UMGImb6s6tEXfKi959X6VJjMMQ3P6TTQ==", + "version": "2.6.1", "dev": true, "requires": { "ip": "^1.1.5", @@ -28930,31 +23639,24 @@ } }, "socks-proxy-agent": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-5.0.0.tgz", - "integrity": "sha512-lEpa1zsWCChxiynk+lCycKuC502RxDWLKJZoIhnxrWNjLSDGYRFflHA1/228VkRcnv9TIb8w98derGbpKxJRgA==", + "version": "5.0.1", "dev": true, "requires": { - "agent-base": "6", + "agent-base": "^6.0.2", "debug": "4", "socks": "^2.3.3" } }, "source-list-map": { "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==", "dev": true }, "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + "version": "0.7.3", + "dev": true }, "source-map-loader": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/source-map-loader/-/source-map-loader-1.1.2.tgz", - "integrity": "sha512-bjf6eSENOYBX4JZDfl9vVLNsGAQ6Uz90fLmOazcmMcyDYOBFsGxPNn83jXezWLY9bJsVAo1ObztxPcV8HAbjVA==", + "version": "1.1.3", "dev": true, "requires": { "abab": "^2.0.5", @@ -28966,66 +23668,59 @@ }, "dependencies": { "iconv-lite": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.2.tgz", - "integrity": "sha512-2y91h5OpQlolefMPmUlivelittSWy0rP+oYVpn6A7GwVHNE8AWzoYOBNmlwks3LobaJxgHCYZAnyNo2GgpNRNQ==", + "version": "0.6.3", "dev": true, "requires": { "safer-buffer": ">= 2.1.2 < 3.0.0" } }, "schema-utils": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.0.0.tgz", - "integrity": "sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA==", + "version": "3.1.0", "dev": true, "requires": { - "@types/json-schema": "^7.0.6", + "@types/json-schema": "^7.0.7", "ajv": "^6.12.5", "ajv-keywords": "^3.5.2" } + }, + "source-map": { + "version": "0.6.1", + "dev": true } } }, "source-map-resolve": { - "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==", + "version": "0.6.0", "dev": true, "requires": { "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" + "decode-uri-component": "^0.2.0" } }, "source-map-support": { "version": "0.5.19", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz", - "integrity": "sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==", "dev": true, "requires": { "buffer-from": "^1.0.0", "source-map": "^0.6.0" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "dev": true + } } }, "source-map-url": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz", - "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=", + "version": "0.4.1", "dev": true }, "sourcemap-codec": { "version": "1.4.8", - "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", - "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==", "dev": true }, "spdy": { "version": "4.0.2", - "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.2.tgz", - "integrity": "sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==", "dev": true, "requires": { "debug": "^4.1.0", @@ -29037,8 +23732,6 @@ }, "spdy-transport": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/spdy-transport/-/spdy-transport-3.0.0.tgz", - "integrity": "sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==", "dev": true, "requires": { "debug": "^4.1.0", @@ -29050,18 +23743,53 @@ } }, "speed-measure-webpack-plugin": { - "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==", + "version": "1.4.2", "dev": true, "requires": { - "chalk": "^2.0.1" + "chalk": "^4.1.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.1", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } } }, "split-string": { "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==", "dev": true, "requires": { "extend-shallow": "^3.0.0" @@ -29069,14 +23797,10 @@ }, "sprintf-js": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", "dev": true }, "sshpk": { "version": "1.16.1", - "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz", - "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==", "dev": true, "requires": { "asn1": "~0.2.3", @@ -29091,9 +23815,7 @@ } }, "ssri": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-8.0.0.tgz", - "integrity": "sha512-aq/pz989nxVYwn16Tsbj1TqFpD5LLrQxHf5zaHuieFV+R0Bbr4y8qUsOA45hXT/N4/9UNXTarBjnjVmjSOVaAA==", + "version": "8.0.1", "dev": true, "requires": { "minipass": "^3.1.1" @@ -29101,14 +23823,10 @@ }, "stable": { "version": "0.1.8", - "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz", - "integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==", "dev": true }, "static-extend": { "version": "0.1.2", - "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", - "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", "dev": true, "requires": { "define-property": "^0.2.5", @@ -29117,25 +23835,64 @@ "dependencies": { "define-property": { "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", "dev": true, "requires": { "is-descriptor": "^0.1.0" } + }, + "is-accessor-descriptor": { + "version": "0.1.6", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-data-descriptor": { + "version": "0.1.4", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-descriptor": { + "version": "0.1.6", + "dev": true, + "requires": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + } + }, + "kind-of": { + "version": "5.1.0", + "dev": true } } }, "statuses": { "version": "1.5.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", - "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=", "dev": true }, "stream-browserify": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.2.tgz", - "integrity": "sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg==", "dev": true, "requires": { "inherits": "~2.0.1", @@ -29144,14 +23901,10 @@ "dependencies": { "isarray": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", "dev": true }, "readable-stream": { "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", "dev": true, "requires": { "core-util-is": "~1.0.0", @@ -29163,16 +23916,8 @@ "util-deprecate": "~1.0.1" } }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, "string_decoder": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "dev": true, "requires": { "safe-buffer": "~5.1.0" @@ -29182,8 +23927,6 @@ }, "stream-each": { "version": "1.2.3", - "resolved": "https://registry.npmjs.org/stream-each/-/stream-each-1.2.3.tgz", - "integrity": "sha512-vlMC2f8I2u/bZGqkdfLQW/13Zihpej/7PmSiMQsbYddxuTsJp8vRe2x2FvVExZg7FaOds43ROAuFJwPR4MTZLw==", "dev": true, "requires": { "end-of-stream": "^1.1.0", @@ -29192,8 +23935,6 @@ }, "stream-http": { "version": "2.8.3", - "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-2.8.3.tgz", - "integrity": "sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw==", "dev": true, "requires": { "builtin-status-codes": "^3.0.0", @@ -29205,14 +23946,10 @@ "dependencies": { "isarray": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", "dev": true }, "readable-stream": { "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", "dev": true, "requires": { "core-util-is": "~1.0.0", @@ -29224,16 +23961,8 @@ "util-deprecate": "~1.0.1" } }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, "string_decoder": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "dev": true, "requires": { "safe-buffer": "~5.1.0" @@ -29243,66 +23972,43 @@ }, "stream-shift": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.1.tgz", - "integrity": "sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ==", "dev": true }, "string_decoder": { "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==", + "dev": true, "requires": { "safe-buffer": "~5.2.0" + }, + "dependencies": { + "safe-buffer": { + "version": "5.2.1", + "dev": true + } } }, "string-width": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", - "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", - "requires": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" - } - }, - "string.prototype.trimend": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.3.tgz", - "integrity": "sha512-ayH0pB+uf0U28CtjlLvL7NaohvR1amUvVZk+y3DYb0Ey2PUV5zPkkKy9+U1ndVEIXO8hNg18eIv9Jntbii+dKw==", + "version": "4.2.2", "dev": true, "requires": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3" - } - }, - "string.prototype.trimstart": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.3.tgz", - "integrity": "sha512-oBIBUy5lea5tt0ovtOFiEQaBkoBBkyJhZXzJYrSmDo5IUUqbOPvVezuRs/agBIdZ2p2Eo1FD6bD9USyBLfl3xg==", - "dev": true, - "requires": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3" + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.0" } }, "strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "version": "6.0.0", + "dev": true, "requires": { - "ansi-regex": "^4.1.0" + "ansi-regex": "^5.0.0" } }, "strip-eof": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", - "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=", "dev": true }, "style-loader": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-2.0.0.tgz", - "integrity": "sha512-Z0gYUJmzZ6ZdRUqpg1r8GsaFKypE+3xAzuFeMuoHgjc9KZv3wMyCRjQIWEbhoFSq7+7yoHXySDJyyWQaPajeiQ==", "dev": true, "requires": { "loader-utils": "^2.0.0", @@ -29310,12 +24016,10 @@ }, "dependencies": { "schema-utils": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.0.0.tgz", - "integrity": "sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA==", + "version": "3.1.0", "dev": true, "requires": { - "@types/json-schema": "^7.0.6", + "@types/json-schema": "^7.0.7", "ajv": "^6.12.5", "ajv-keywords": "^3.5.2" } @@ -29323,33 +24027,15 @@ } }, "stylehacks": { - "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==", + "version": "5.0.1", "dev": true, "requires": { - "browserslist": "^4.0.0", - "postcss": "^7.0.0", - "postcss-selector-parser": "^3.0.0" - }, - "dependencies": { - "postcss-selector-parser": { - "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==", - "dev": true, - "requires": { - "dot-prop": "^5.2.0", - "indexes-of": "^1.0.1", - "uniq": "^1.0.1" - } - } + "browserslist": "^4.16.0", + "postcss-selector-parser": "^6.0.4" } }, "stylus": { "version": "0.54.8", - "resolved": "https://registry.npmjs.org/stylus/-/stylus-0.54.8.tgz", - "integrity": "sha512-vr54Or4BZ7pJafo2mpf0ZcwA74rpuYCZbxrHBsH8kbcXOwSfvBFwsRfpGO5OD5fhG5HDCFW737PKaawI7OqEAg==", "dev": true, "requires": { "css-parse": "~2.0.0", @@ -29364,43 +24050,23 @@ "dependencies": { "debug": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", "dev": true, "requires": { "ms": "2.0.0" } }, - "mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "dev": true - }, "ms": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", "dev": true }, "semver": { "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - }, - "source-map": { - "version": "0.7.3", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", - "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", "dev": true } } }, "stylus-loader": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/stylus-loader/-/stylus-loader-4.1.1.tgz", - "integrity": "sha512-Vnm7J/nIs/P6swIrdwJW/dflhsCOiFmb1U3PeQ6phRtg1soPLN4uKnnL7AtGIJDe173elbtYIXVzmCyF493CfA==", + "version": "4.3.3", "dev": true, "requires": { "fast-glob": "^3.2.4", @@ -29411,12 +24077,10 @@ }, "dependencies": { "schema-utils": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.0.0.tgz", - "integrity": "sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA==", + "version": "3.1.0", "dev": true, "requires": { - "@types/json-schema": "^7.0.6", + "@types/json-schema": "^7.0.7", "ajv": "^6.12.5", "ajv-keywords": "^3.5.2" } @@ -29425,50 +24089,128 @@ }, "supports-color": { "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", "dev": true, "requires": { "has-flag": "^3.0.0" } }, "svgo": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/svgo/-/svgo-1.3.2.tgz", - "integrity": "sha512-yhy/sQYxR5BkC98CY7o31VGsg014AKLEPxdfhora76l36hD9Rdy5NZA/Ocn6yayNPgSamYdtX2rFJdcv07AYVw==", + "version": "2.3.1", "dev": true, "requires": { - "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" + "@trysound/sax": "0.1.1", + "chalk": "^4.1.0", + "commander": "^7.1.0", + "css-select": "^4.1.3", + "css-tree": "^1.1.2", + "csso": "^4.2.0", + "stable": "^0.1.8" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.1", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "dev": true + }, + "css-select": { + "version": "4.1.3", + "dev": true, + "requires": { + "boolbase": "^1.0.0", + "css-what": "^5.0.0", + "domhandler": "^4.2.0", + "domutils": "^2.6.0", + "nth-check": "^2.0.0" + } + }, + "css-what": { + "version": "5.0.1", + "dev": true + }, + "dom-serializer": { + "version": "1.3.2", + "dev": true, + "requires": { + "domelementtype": "^2.0.1", + "domhandler": "^4.2.0", + "entities": "^2.0.0" + } + }, + "domelementtype": { + "version": "2.2.0", + "dev": true + }, + "domhandler": { + "version": "4.2.0", + "dev": true, + "requires": { + "domelementtype": "^2.2.0" + } + }, + "domutils": { + "version": "2.7.0", + "dev": true, + "requires": { + "dom-serializer": "^1.0.1", + "domelementtype": "^2.2.0", + "domhandler": "^4.2.0" + } + }, + "entities": { + "version": "2.2.0", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "dev": true + }, + "nth-check": { + "version": "2.0.0", + "dev": true, + "requires": { + "boolbase": "^1.0.0" + } + }, + "supports-color": { + "version": "7.2.0", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } } }, "symbol-observable": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-3.0.0.tgz", - "integrity": "sha512-6tDOXSHiVjuCaasQSWTmHUWn4PuG7qa3+1WT031yTc/swT7+rLiw3GOrFxaH1E3lLP09dH3bVuVDf2gK5rxG3Q==", "dev": true }, "tapable": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.1.1.tgz", - "integrity": "sha512-Wib1S8m2wdpLbmQz0RBEVosIyvb/ykfKXf3ZIDqvWoMg/zTNm6G/tDSuUM61J1kNCDXWJrLHGSFeMhAG+gAGpQ==", + "version": "2.2.0", "dev": true }, "tar": { "version": "6.1.0", - "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.0.tgz", - "integrity": "sha512-DUCttfhsnLCjwoDoFcI+B2iJgYa93vBnDUATYEeRx6sntCTdN01VnqsIuTlALXla/LWooNg0yEGeB+Y8WdFxGA==", "dev": true, "requires": { "chownr": "^2.0.0", @@ -29477,20 +24219,10 @@ "minizlib": "^2.1.1", "mkdirp": "^1.0.3", "yallist": "^4.0.0" - }, - "dependencies": { - "mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "dev": true - } } }, "terser": { - "version": "5.3.7", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.3.7.tgz", - "integrity": "sha512-lJbKdfxWvjpV330U4PBZStCT9h3N9A4zZVA5Y4k9sCWXknrpdyxi1oMsRKLmQ/YDMDxSBKIh88v0SkdhdqX06w==", + "version": "5.5.1", "dev": true, "requires": { "commander": "^2.20.0", @@ -29498,18 +24230,14 @@ "source-map-support": "~0.5.19" }, "dependencies": { - "source-map": { - "version": "0.7.3", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", - "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", + "commander": { + "version": "2.20.3", "dev": true } } }, "terser-webpack-plugin": { "version": "4.2.3", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-4.2.3.tgz", - "integrity": "sha512-jTgXh40RnvOrLQNgIkwEKnQ8rmHjHK4u+6UBEi+W+FPmvb+uo+chJXntKe7/3lW5mNysgSWD60KyesnhW8D6MQ==", "dev": true, "requires": { "cacache": "^15.0.5", @@ -29523,53 +24251,39 @@ "webpack-sources": "^1.4.3" }, "dependencies": { - "p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dev": true, - "requires": { - "yocto-queue": "^0.1.0" - } - }, "schema-utils": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.0.0.tgz", - "integrity": "sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA==", + "version": "3.1.0", "dev": true, "requires": { - "@types/json-schema": "^7.0.6", + "@types/json-schema": "^7.0.7", "ajv": "^6.12.5", "ajv-keywords": "^3.5.2" } }, - "serialize-javascript": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-5.0.1.tgz", - "integrity": "sha512-SaaNal9imEO737H2c05Og0/8LUXG7EnsZyMa8MzkmuHoELfT6txuj0cMqRj6zfPKnmQ1yasR4PCJc8x+M4JSPA==", + "source-map": { + "version": "0.6.1", + "dev": true + }, + "webpack-sources": { + "version": "1.4.3", "dev": true, "requires": { - "randombytes": "^2.1.0" + "source-list-map": "^2.0.0", + "source-map": "~0.6.1" } } } }, "text-table": { "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", "dev": true }, "through": { "version": "2.3.8", - "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", "dev": true }, "through2": { "version": "2.0.5", - "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", - "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", "dev": true, "requires": { "readable-stream": "~2.3.6", @@ -29578,14 +24292,10 @@ "dependencies": { "isarray": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", "dev": true }, "readable-stream": { "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", "dev": true, "requires": { "core-util-is": "~1.0.0", @@ -29597,16 +24307,8 @@ "util-deprecate": "~1.0.1" } }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, "string_decoder": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "dev": true, "requires": { "safe-buffer": "~5.1.0" @@ -29616,14 +24318,10 @@ }, "thunky": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz", - "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==", "dev": true }, "timers-browserify": { "version": "2.0.12", - "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.12.tgz", - "integrity": "sha512-9phl76Cqm6FhSX9Xe1ZUAMLtm1BLkKj2Qd5ApyWkXzsMRaA7dgr81kf4wJmQf/hAvg8EEyJxDo3du/0KlhPiKQ==", "dev": true, "requires": { "setimmediate": "^1.0.4" @@ -29631,26 +24329,10 @@ }, "timsort": { "version": "0.3.0", - "resolved": "https://registry.npmjs.org/timsort/-/timsort-0.3.0.tgz", - "integrity": "sha1-QFQRqOfmM5/mTbmiNN4R3DHgK9Q=", "dev": true }, - "tiny-secp256k1": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/tiny-secp256k1/-/tiny-secp256k1-1.1.5.tgz", - "integrity": "sha512-duE2hSLSQIpHGzmK48OgRrGTi+4OTkXLC6aa86uOYQ6LLCYZSarVKIAvEtY7MoXjoL6bOXMSerEGMzrvW4SkDw==", - "requires": { - "bindings": "^1.3.0", - "bn.js": "^4.11.8", - "create-hmac": "^1.1.7", - "elliptic": "^6.4.0", - "nan": "^2.13.2" - } - }, "tmp": { "version": "0.0.33", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", - "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", "dev": true, "requires": { "os-tmpdir": "~1.0.2" @@ -29658,20 +24340,14 @@ }, "to-arraybuffer": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz", - "integrity": "sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M=", "dev": true }, "to-fast-properties": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", "dev": true }, "to-object-path": { "version": "0.3.0", - "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", - "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", "dev": true, "requires": { "kind-of": "^3.0.2" @@ -29679,8 +24355,6 @@ "dependencies": { "kind-of": { "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, "requires": { "is-buffer": "^1.1.5" @@ -29690,8 +24364,6 @@ }, "to-regex": { "version": "3.0.2", - "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", - "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", "dev": true, "requires": { "define-property": "^2.0.2", @@ -29702,8 +24374,6 @@ }, "to-regex-range": { "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==", "dev": true, "requires": { "is-number": "^7.0.0" @@ -29711,14 +24381,10 @@ }, "toidentifier": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", - "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==", "dev": true }, "tough-cookie": { "version": "2.5.0", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", - "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", "dev": true, "requires": { "psl": "^1.1.28", @@ -29727,14 +24393,10 @@ }, "tree-kill": { "version": "1.2.2", - "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz", - "integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==", "dev": true }, "ts-node": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-9.1.0.tgz", - "integrity": "sha512-0yqcL4sgruCvM+w64LiAfNJo6+lHfCYc5Ajj4yiLNkJ9oZ2HWaa+Kso7htYOOxVQ7+csAjdUjffOe9PIqC4pMg==", + "version": "9.1.1", "dev": true, "requires": { "arg": "^4.1.0", @@ -29747,19 +24409,13 @@ }, "ts-pnp": { "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==", "dev": true }, "tslib": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.0.3.tgz", - "integrity": "sha512-uZtkfKblCEQtZKBF6EBXVZeQNl82yqtDQdv+eck8u7tdPxjLu2/lp5/uPW+um2tpuxINHWy3GhiccY7QgEaVHQ==" + "version": "2.1.0" }, "tslint": { "version": "6.1.3", - "resolved": "https://registry.npmjs.org/tslint/-/tslint-6.1.3.tgz", - "integrity": "sha512-IbR4nkT96EQOvKE2PW/djGz8iGNeJ4rF2mBfiYaR/nvUWYKJhLwimoJKgjIFEIDibBtOevj7BqCRL4oHeWWUCg==", "dev": true, "requires": { "@babel/code-frame": "^7.0.0", @@ -29777,24 +24433,29 @@ "tsutils": "^2.29.0" }, "dependencies": { + "commander": { + "version": "2.20.3", + "dev": true + }, + "mkdirp": { + "version": "0.5.5", + "dev": true, + "requires": { + "minimist": "^1.2.5" + } + }, "semver": { "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", "dev": true }, "tslib": { "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", "dev": true } } }, "tsutils": { "version": "2.29.0", - "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-2.29.0.tgz", - "integrity": "sha512-g5JVHCIJwzfISaXpXE1qvNalca5Jwob6FjI4AoPlqMusJ6ftFE7IkkFoMhVLRgK+4Kx3gkzb8UZK5t5yTTvEmA==", "dev": true, "requires": { "tslib": "^1.8.1" @@ -29802,22 +24463,16 @@ "dependencies": { "tslib": { "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", "dev": true } } }, "tty-browserify": { "version": "0.0.0", - "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz", - "integrity": "sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY=", "dev": true }, "tunnel-agent": { "version": "0.6.0", - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", - "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", "dev": true, "requires": { "safe-buffer": "^5.0.1" @@ -29825,26 +24480,14 @@ }, "tweetnacl": { "version": "0.14.5", - "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", - "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", - "dev": true - }, - "type": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz", - "integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==", "dev": true }, "type-fest": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.11.0.tgz", - "integrity": "sha512-OdjXJxnCN1AvyLSzeKIgXTXxV+99ZuXl3Hpo9XpJAv9MBcHrrJOQ5kV7ypXOuQie+AmWG25hLbiKdwYTifzcfQ==", + "version": "0.21.3", "dev": true }, "type-is": { "version": "1.6.18", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", - "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", "dev": true, "requires": { "media-typer": "0.3.0", @@ -29853,46 +24496,29 @@ }, "typedarray": { "version": "0.0.6", - "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", - "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=", "dev": true }, "typedarray-to-buffer": { "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==", "dev": true, "requires": { "is-typedarray": "^1.0.0" } }, - "typeforce": { - "version": "1.18.0", - "resolved": "https://registry.npmjs.org/typeforce/-/typeforce-1.18.0.tgz", - "integrity": "sha512-7uc1O8h1M1g0rArakJdf0uLRSSgFcYexrVoKo+bzJd32gd4gDy2L/Z+8/FjPnU9ydY3pEnVPtr9FyscYY60K1g==" - }, "typescript": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.0.5.tgz", - "integrity": "sha512-ywmr/VrTVCmNTJ6iV2LwIrfG1P+lv6luD8sUJs+2eI9NLGigaN+nUQc13iHqisq7bra9lnmUSYqbJvegraBOPQ==", + "version": "4.1.5", "dev": true }, "uglify-js": { - "version": "3.12.1", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.12.1.tgz", - "integrity": "sha512-o8lHP20KjIiQe5b/67Rh68xEGRrc2SRsCuuoYclXXoC74AfSRGblU1HKzJWH3HxPZ+Ort85fWHpSX7KwBUC9CQ==", + "version": "3.13.10", "optional": true }, "unicode-canonical-property-names-ecmascript": { "version": "1.0.4", - "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz", - "integrity": "sha512-jDrNnXWHd4oHiTZnx/ZG7gtUTVp+gCcTTKr8L0HjlwphROEW3+Him+IpvC+xcJEFegapiMZyZe02CyuOnRmbnQ==", "dev": true }, "unicode-match-property-ecmascript": { "version": "1.0.4", - "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.4.tgz", - "integrity": "sha512-L4Qoh15vTfntsn4P1zqnHulG0LdXgjSO035fEpdtp6YxXhMT51Q6vgM5lYdG/5X3MjS+k/Y9Xw4SFCY9IkR0rg==", "dev": true, "requires": { "unicode-canonical-property-names-ecmascript": "^1.0.4", @@ -29901,44 +24527,34 @@ }, "unicode-match-property-value-ecmascript": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.2.0.tgz", - "integrity": "sha512-wjuQHGQVofmSJv1uVISKLE5zO2rNGzM/KCYZch/QQvez7C1hUhBIuZ701fYXExuufJFMPhv2SyL8CyoIfMLbIQ==", "dev": true }, "unicode-property-aliases-ecmascript": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.1.0.tgz", - "integrity": "sha512-PqSoPh/pWetQ2phoj5RLiaqIk4kCNwoV3CI+LfGmWLKI3rE3kl1h59XpX2BjgDrmbxD9ARtQobPGU1SguCYuQg==", "dev": true }, "union-value": { "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==", "dev": true, "requires": { "arr-union": "^3.1.0", "get-value": "^2.0.6", "is-extendable": "^0.1.1", "set-value": "^2.0.1" + }, + "dependencies": { + "is-extendable": { + "version": "0.1.1", + "dev": true + } } }, - "uniq": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/uniq/-/uniq-1.0.1.tgz", - "integrity": "sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8=", - "dev": true - }, "uniqs": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/uniqs/-/uniqs-2.0.0.tgz", - "integrity": "sha1-/+3ks2slKQaW5uFl1KWe25mOawI=", "dev": true }, "unique-filename": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz", - "integrity": "sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==", "dev": true, "requires": { "unique-slug": "^2.0.0" @@ -29946,8 +24562,6 @@ }, "unique-slug": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.2.tgz", - "integrity": "sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==", "dev": true, "requires": { "imurmurhash": "^0.1.4" @@ -29955,8 +24569,6 @@ }, "universal-analytics": { "version": "0.4.23", - "resolved": "https://registry.npmjs.org/universal-analytics/-/universal-analytics-0.4.23.tgz", - "integrity": "sha512-lgMIH7XBI6OgYn1woDEmxhGdj8yDefMKg7GkWdeATAlQZFrMrNyxSkpDzY57iY0/6fdlzTbBV03OawvvzG+q7A==", "dev": true, "requires": { "debug": "^4.1.1", @@ -29966,34 +24578,20 @@ "dependencies": { "uuid": { "version": "3.4.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", - "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", "dev": true } } }, "universalify": { "version": "0.1.2", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", "dev": true }, "unpipe": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=", - "dev": true - }, - "unquote": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/unquote/-/unquote-1.1.1.tgz", - "integrity": "sha1-j97XMk7G6IoP+LkF58CYzcCG1UQ=", "dev": true }, "unset-value": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", - "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", "dev": true, "requires": { "has-value": "^0.3.1", @@ -30002,8 +24600,6 @@ "dependencies": { "has-value": { "version": "0.3.1", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", - "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", "dev": true, "requires": { "get-value": "^2.0.3", @@ -30013,8 +24609,6 @@ "dependencies": { "isobject": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", - "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", "dev": true, "requires": { "isarray": "1.0.0" @@ -30024,48 +24618,34 @@ }, "has-values": { "version": "0.1.4", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", - "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=", "dev": true }, "isarray": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", "dev": true } } }, "untildify": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/untildify/-/untildify-4.0.0.tgz", - "integrity": "sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw==", "dev": true }, "upath": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz", - "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==", "dev": true }, "uri-js": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.0.tgz", - "integrity": "sha512-B0yRTzYdUCCn9n+F4+Gh4yIDtMQcaJsmYBDsTSG8g/OejKBodLQ2IHfN3bM7jUsRXndopT7OIXWdYqc1fjmV6g==", + "version": "4.4.1", "requires": { "punycode": "^2.1.0" } }, "urix": { "version": "0.1.0", - "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", - "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=", "dev": true }, "url": { "version": "0.11.0", - "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz", - "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=", "dev": true, "requires": { "punycode": "1.3.2", @@ -30074,16 +24654,12 @@ "dependencies": { "punycode": { "version": "1.3.2", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", - "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=", "dev": true } } }, "url-parse": { - "version": "1.4.7", - "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.4.7.tgz", - "integrity": "sha512-d3uaVyzDB9tQoSXFvuSUNFibTd9zxd2bkVrDRvF5TmvWWQwqE4lgYJ5m+x1DbecWkw+LK4RNl2CU1hHuOKPVlg==", + "version": "1.5.1", "dev": true, "requires": { "querystringify": "^2.1.1", @@ -30092,14 +24668,10 @@ }, "use": { "version": "3.1.1", - "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", - "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==", "dev": true }, "util": { "version": "0.11.1", - "resolved": "https://registry.npmjs.org/util/-/util-0.11.1.tgz", - "integrity": "sha512-HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ==", "dev": true, "requires": { "inherits": "2.0.3" @@ -30107,94 +24679,38 @@ "dependencies": { "inherits": { "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", "dev": true } } }, "util-deprecate": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" - }, - "util.promisify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/util.promisify/-/util.promisify-1.0.1.tgz", - "integrity": "sha512-g9JpC/3He3bm38zsLupWryXHoEcS22YHthuPQSJdMy6KNrzIRzWqcsHzD/WUnqe45whVou4VIsPew37DoXWNrA==", - "dev": true, - "requires": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.2", - "has-symbols": "^1.0.1", - "object.getownpropertydescriptors": "^2.1.0" - }, - "dependencies": { - "es-abstract": { - "version": "1.17.7", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.7.tgz", - "integrity": "sha512-VBl/gnfcJ7OercKA9MVaegWsBHFjV492syMudcnQZvt/Dw8ezpcOHYZXa/J96O8vx+g4x65YKhxOwDUh63aS5g==", - "dev": true, - "requires": { - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.1", - "is-callable": "^1.2.2", - "is-regex": "^1.1.1", - "object-inspect": "^1.8.0", - "object-keys": "^1.1.1", - "object.assign": "^4.1.1", - "string.prototype.trimend": "^1.0.1", - "string.prototype.trimstart": "^1.0.1" - } - } - } + "dev": true }, "utils-merge": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", - "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=", "dev": true }, "uuid": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==" + "version": "8.3.2" }, "validate-npm-package-name": { "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=", "dev": true, "requires": { "builtins": "^1.0.3" } }, - "varuint-bitcoin": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/varuint-bitcoin/-/varuint-bitcoin-1.1.2.tgz", - "integrity": "sha512-4EVb+w4rx+YfVM32HQX42AbbT7/1f5zwAYhIujKXKk8NQK+JfRVl3pqT3hjNn/L+RstigmGGKVwHA/P0wgITZw==", - "requires": { - "safe-buffer": "^5.1.1" - } - }, "vary": { "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", - "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=", "dev": true }, "vendors": { "version": "1.0.4", - "resolved": "https://registry.npmjs.org/vendors/-/vendors-1.0.4.tgz", - "integrity": "sha512-/juG65kTL4Cy2su4P8HjtkTxk6VmJDiOPBufWniqQ6wknac6jNiXS9vU+hO3wgusiyqWlzTbVHi0dyJqRONg3w==", "dev": true }, "verror": { "version": "1.10.0", - "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", - "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", "dev": true, "requires": { "assert-plus": "^1.0.0", @@ -30204,14 +24720,10 @@ }, "vm-browserify": { "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-1.1.2.tgz", - "integrity": "sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==", "dev": true }, "watchpack": { "version": "1.7.5", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.7.5.tgz", - "integrity": "sha512-9P3MWk6SrKjHsGkLT2KHXdQ/9SNkyoJbabxnKOoJepsvJjJG8uYTR3yTPxPQvNDI3w4Nz1xnE0TLHK4RIVe/MQ==", "dev": true, "requires": { "chokidar": "^3.4.1", @@ -30222,8 +24734,6 @@ }, "watchpack-chokidar2": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/watchpack-chokidar2/-/watchpack-chokidar2-2.0.1.tgz", - "integrity": "sha512-nCFfBIPKr5Sh61s4LPpy1Wtfi0HE8isJ3d2Yb5/Ppw2P2B/3eVSEBjKfN0fmHJSK14+31KwMKmcrzs2GM4P0Ww==", "dev": true, "optional": true, "requires": { @@ -30232,8 +24742,6 @@ "dependencies": { "anymatch": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", - "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", "dev": true, "optional": true, "requires": { @@ -30243,8 +24751,6 @@ "dependencies": { "normalize-path": { "version": "2.1.1", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", - "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", "dev": true, "optional": true, "requires": { @@ -30255,15 +24761,11 @@ }, "binary-extensions": { "version": "1.13.1", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz", - "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==", "dev": true, "optional": true }, "braces": { "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", "dev": true, "optional": true, "requires": { @@ -30281,8 +24783,6 @@ "dependencies": { "extend-shallow": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, "optional": true, "requires": { @@ -30293,8 +24793,6 @@ }, "chokidar": { "version": "2.1.8", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz", - "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==", "dev": true, "optional": true, "requires": { @@ -30314,8 +24812,6 @@ }, "fill-range": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", "dev": true, "optional": true, "requires": { @@ -30327,8 +24823,6 @@ "dependencies": { "extend-shallow": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, "optional": true, "requires": { @@ -30337,21 +24831,8 @@ } } }, - "fsevents": { - "version": "1.2.13", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz", - "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==", - "dev": true, - "optional": true, - "requires": { - "bindings": "^1.5.0", - "nan": "^2.12.1" - } - }, "glob-parent": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", - "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", "dev": true, "optional": true, "requires": { @@ -30361,8 +24842,6 @@ "dependencies": { "is-glob": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", - "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", "dev": true, "optional": true, "requires": { @@ -30373,18 +24852,19 @@ }, "is-binary-path": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", - "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", "dev": true, "optional": true, "requires": { "binary-extensions": "^1.0.0" } }, + "is-extendable": { + "version": "0.1.1", + "dev": true, + "optional": true + }, "is-number": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", "dev": true, "optional": true, "requires": { @@ -30393,8 +24873,6 @@ "dependencies": { "kind-of": { "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, "optional": true, "requires": { @@ -30405,15 +24883,11 @@ }, "isarray": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", "dev": true, "optional": true }, "micromatch": { "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", "dev": true, "optional": true, "requires": { @@ -30434,8 +24908,6 @@ }, "readable-stream": { "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", "dev": true, "optional": true, "requires": { @@ -30450,8 +24922,6 @@ }, "readdirp": { "version": "2.2.1", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz", - "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", "dev": true, "optional": true, "requires": { @@ -30460,17 +24930,8 @@ "readable-stream": "^2.0.2" } }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true, - "optional": true - }, "string_decoder": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "dev": true, "optional": true, "requires": { @@ -30479,8 +24940,6 @@ }, "to-regex-range": { "version": "2.1.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", - "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", "dev": true, "optional": true, "requires": { @@ -30492,8 +24951,6 @@ }, "wbuf": { "version": "1.7.3", - "resolved": "https://registry.npmjs.org/wbuf/-/wbuf-1.7.3.tgz", - "integrity": "sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==", "dev": true, "requires": { "minimalistic-assert": "^1.0.0" @@ -30501,8 +24958,6 @@ }, "wcwidth": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", - "integrity": "sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g=", "dev": true, "requires": { "defaults": "^1.0.3" @@ -30510,8 +24965,6 @@ }, "webpack": { "version": "4.44.2", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.44.2.tgz", - "integrity": "sha512-6KJVGlCxYdISyurpQ0IPTklv+DULv05rs2hseIXer6D7KrUicRDLFb4IUM1S6LUAKypPM/nSiVSuv8jHu1m3/Q==", "dev": true, "requires": { "@webassemblyjs/ast": "1.9.0", @@ -30541,8 +24994,6 @@ "dependencies": { "braces": { "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", "dev": true, "requires": { "arr-flatten": "^1.1.0", @@ -30559,8 +25010,6 @@ "dependencies": { "extend-shallow": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, "requires": { "is-extendable": "^0.1.0" @@ -30570,8 +25019,6 @@ }, "cacache": { "version": "12.0.4", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-12.0.4.tgz", - "integrity": "sha512-a0tMB40oefvuInr4Cwb3GerbL9xTj1D5yg0T5xrjGCGyfvbxseIXX7BAO/u/hIXdafzOI5JC3wDwHyf24buOAQ==", "dev": true, "requires": { "bluebird": "^3.5.5", @@ -30593,14 +25040,14 @@ }, "chownr": { "version": "1.1.4", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", - "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", + "dev": true + }, + "commander": { + "version": "2.20.3", "dev": true }, "enhanced-resolve": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.3.0.tgz", - "integrity": "sha512-3e87LvavsdxyoCfGusJnrZ5G8SLPOFeHSNpZI/ATL9a5leXo2k0w6MKnbqhdBad9qTobSfB20Ld7UmgoNbAZkQ==", + "version": "4.5.0", "dev": true, "requires": { "graceful-fs": "^4.1.2", @@ -30610,8 +25057,6 @@ "dependencies": { "memory-fs": { "version": "0.5.0", - "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.5.0.tgz", - "integrity": "sha512-jA0rdU5KoQMC0e6ppoNRtpp6vjFq6+NY7r8hywnC7V+1Xj/MtHwGIbB1QaK/dunyjWteJzmkpd7ooeWg10T7GA==", "dev": true, "requires": { "errno": "^0.1.3", @@ -30622,8 +25067,6 @@ }, "fill-range": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", "dev": true, "requires": { "extend-shallow": "^2.0.1", @@ -30634,8 +25077,6 @@ "dependencies": { "extend-shallow": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, "requires": { "is-extendable": "^0.1.0" @@ -30645,8 +25086,6 @@ }, "find-cache-dir": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.1.0.tgz", - "integrity": "sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==", "dev": true, "requires": { "commondir": "^1.0.1", @@ -30654,10 +25093,19 @@ "pkg-dir": "^3.0.0" } }, + "find-up": { + "version": "3.0.0", + "dev": true, + "requires": { + "locate-path": "^3.0.0" + } + }, + "is-extendable": { + "version": "0.1.1", + "dev": true + }, "is-number": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", "dev": true, "requires": { "kind-of": "^3.0.2" @@ -30665,8 +25113,6 @@ "dependencies": { "kind-of": { "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, "requires": { "is-buffer": "^1.1.5" @@ -30676,20 +25122,14 @@ }, "is-wsl": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", - "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=", "dev": true }, "isarray": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", "dev": true }, "json5": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", "dev": true, "requires": { "minimist": "^1.2.0" @@ -30697,8 +25137,6 @@ }, "loader-utils": { "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", - "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", "dev": true, "requires": { "big.js": "^5.2.2", @@ -30706,19 +25144,31 @@ "json5": "^1.0.1" } }, + "locate-path": { + "version": "3.0.0", + "dev": true, + "requires": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + } + }, "lru-cache": { "version": "5.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", "dev": true, "requires": { "yallist": "^3.0.2" } }, + "make-dir": { + "version": "2.1.0", + "dev": true, + "requires": { + "pify": "^4.0.1", + "semver": "^5.6.0" + } + }, "micromatch": { "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", "dev": true, "requires": { "arr-diff": "^4.0.0", @@ -30736,10 +25186,44 @@ "to-regex": "^3.0.2" } }, + "mkdirp": { + "version": "0.5.5", + "dev": true, + "requires": { + "minimist": "^1.2.5" + } + }, + "p-limit": { + "version": "2.3.0", + "dev": true, + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "3.0.0", + "dev": true, + "requires": { + "p-limit": "^2.0.0" + } + }, + "path-exists": { + "version": "3.0.0", + "dev": true + }, + "pify": { + "version": "4.0.1", + "dev": true + }, + "pkg-dir": { + "version": "3.0.0", + "dev": true, + "requires": { + "find-up": "^3.0.0" + } + }, "readable-stream": { "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", "dev": true, "requires": { "core-util-is": "~1.0.0", @@ -30753,23 +25237,13 @@ }, "rimraf": { "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", "dev": true, "requires": { "glob": "^7.1.3" } }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, "schema-utils": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", - "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", "dev": true, "requires": { "ajv": "^6.1.0", @@ -30777,10 +25251,23 @@ "ajv-keywords": "^3.1.0" } }, + "semver": { + "version": "5.7.1", + "dev": true + }, + "serialize-javascript": { + "version": "4.0.0", + "dev": true, + "requires": { + "randombytes": "^2.1.0" + } + }, + "source-map": { + "version": "0.6.1", + "dev": true + }, "ssri": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-6.0.1.tgz", - "integrity": "sha512-3Wge10hNcT1Kur4PDFwEieXSCMCJs/7WvSACcrMYrNp+b8kDL1/0wJch5Ni2WrtwEa2IO8OsVfeKIciKCDx/QA==", + "version": "6.0.2", "dev": true, "requires": { "figgy-pudding": "^3.5.1" @@ -30788,8 +25275,6 @@ }, "string_decoder": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "dev": true, "requires": { "safe-buffer": "~5.1.0" @@ -30797,14 +25282,10 @@ }, "tapable": { "version": "1.1.3", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz", - "integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==", "dev": true }, "terser": { "version": "4.8.0", - "resolved": "https://registry.npmjs.org/terser/-/terser-4.8.0.tgz", - "integrity": "sha512-EAPipTNeWsb/3wLPeup1tVPaXfIaU68xMnVdPafIL1TV05OhASArYyIfFvnvJCNrR2NIOvDVNNTFRa+Re2MWyw==", "dev": true, "requires": { "commander": "^2.20.0", @@ -30814,8 +25295,6 @@ }, "terser-webpack-plugin": { "version": "1.4.5", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-1.4.5.tgz", - "integrity": "sha512-04Rfe496lN8EYruwi6oPQkG0vo8C+HT49X687FZnpPF0qMAIHONI6HEXYPKDOE8e5HjXTyKfqRd/agHtH0kOtw==", "dev": true, "requires": { "cacache": "^12.0.2", @@ -30831,26 +25310,32 @@ }, "to-regex-range": { "version": "2.1.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", - "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", "dev": true, "requires": { "is-number": "^3.0.0", "repeat-string": "^1.6.1" } }, + "webpack-sources": { + "version": "1.4.3", + "dev": true, + "requires": { + "source-list-map": "^2.0.0", + "source-map": "~0.6.1" + } + }, + "y18n": { + "version": "4.0.3", + "dev": true + }, "yallist": { "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", "dev": true } } }, "webpack-dev-middleware": { "version": "3.7.2", - "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-3.7.2.tgz", - "integrity": "sha512-1xC42LxbYoqLNAhV6YzTYacicgMZQTqRd27Sim9wn5hJrX3I5nxYy1SxSd4+gjUFsz1dQFj+yEe6zEVmSkeJjw==", "dev": true, "requires": { "memory-fs": "^0.4.1", @@ -30861,17 +25346,20 @@ }, "dependencies": { "mime": { - "version": "2.4.6", - "resolved": "https://registry.npmjs.org/mime/-/mime-2.4.6.tgz", - "integrity": "sha512-RZKhC3EmpBchfTGBVb8fb+RL2cWyw/32lshnsETttkBAyAUXSGHxbEJWWRXc751DrIxG1q04b8QwMbAwkRPpUA==", + "version": "2.5.2", "dev": true + }, + "mkdirp": { + "version": "0.5.5", + "dev": true, + "requires": { + "minimist": "^1.2.5" + } } } }, "webpack-dev-server": { - "version": "3.11.0", - "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-3.11.0.tgz", - "integrity": "sha512-PUxZ+oSTxogFQgkTtFndEtJIPNmml7ExwufBZ9L2/Xyyd5PnOL5UreWe5ZT7IU25DSdykL9p1MLQzmLh2ljSeg==", + "version": "3.11.2", "dev": true, "requires": { "ansi-html": "0.0.7", @@ -30894,11 +25382,11 @@ "p-retry": "^3.0.1", "portfinder": "^1.0.26", "schema-utils": "^1.0.0", - "selfsigned": "^1.10.7", + "selfsigned": "^1.10.8", "semver": "^6.3.0", "serve-index": "^1.9.1", - "sockjs": "0.3.20", - "sockjs-client": "1.4.0", + "sockjs": "^0.3.21", + "sockjs-client": "^1.5.0", "spdy": "^4.0.2", "strip-ansi": "^3.0.1", "supports-color": "^6.1.0", @@ -30911,14 +25399,10 @@ "dependencies": { "ansi-regex": { "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", "dev": true }, "anymatch": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", - "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", "dev": true, "requires": { "micromatch": "^3.1.4", @@ -30927,8 +25411,6 @@ "dependencies": { "normalize-path": { "version": "2.1.1", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", - "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", "dev": true, "requires": { "remove-trailing-separator": "^1.0.1" @@ -30938,14 +25420,10 @@ }, "binary-extensions": { "version": "1.13.1", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz", - "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==", "dev": true }, "braces": { "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", "dev": true, "requires": { "arr-flatten": "^1.1.0", @@ -30962,8 +25440,6 @@ "dependencies": { "extend-shallow": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, "requires": { "is-extendable": "^0.1.0" @@ -30971,10 +25447,12 @@ } } }, + "camelcase": { + "version": "5.3.1", + "dev": true + }, "chokidar": { "version": "2.1.8", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz", - "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==", "dev": true, "requires": { "anymatch": "^2.0.0", @@ -30991,10 +25469,34 @@ "upath": "^1.1.1" } }, + "cliui": { + "version": "5.0.0", + "dev": true, + "requires": { + "string-width": "^3.1.0", + "strip-ansi": "^5.2.0", + "wrap-ansi": "^5.1.0" + }, + "dependencies": { + "ansi-regex": { + "version": "4.1.0", + "dev": true + }, + "strip-ansi": { + "version": "5.2.0", + "dev": true, + "requires": { + "ansi-regex": "^4.1.0" + } + } + } + }, + "emoji-regex": { + "version": "7.0.3", + "dev": true + }, "fill-range": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", "dev": true, "requires": { "extend-shallow": "^2.0.1", @@ -31005,8 +25507,6 @@ "dependencies": { "extend-shallow": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, "requires": { "is-extendable": "^0.1.0" @@ -31014,21 +25514,15 @@ } } }, - "fsevents": { - "version": "1.2.13", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz", - "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==", + "find-up": { + "version": "3.0.0", "dev": true, - "optional": true, "requires": { - "bindings": "^1.5.0", - "nan": "^2.12.1" + "locate-path": "^3.0.0" } }, "glob-parent": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", - "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", "dev": true, "requires": { "is-glob": "^3.1.0", @@ -31037,8 +25531,6 @@ "dependencies": { "is-glob": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", - "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", "dev": true, "requires": { "is-extglob": "^2.1.0" @@ -31046,25 +25538,23 @@ } } }, - "is-absolute-url": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-3.0.3.tgz", - "integrity": "sha512-opmNIX7uFnS96NtPmhWQgQx6/NYFgsUXYMllcfzwWKUMwfo8kku1TvE6hkNcH+Q1ts5cMVrsY7j0bxXQDciu9Q==", - "dev": true - }, "is-binary-path": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", - "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", "dev": true, "requires": { "binary-extensions": "^1.0.0" } }, + "is-extendable": { + "version": "0.1.1", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "dev": true + }, "is-number": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", "dev": true, "requires": { "kind-of": "^3.0.2" @@ -31072,8 +25562,6 @@ "dependencies": { "kind-of": { "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, "requires": { "is-buffer": "^1.1.5" @@ -31083,14 +25571,18 @@ }, "isarray": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", "dev": true }, + "locate-path": { + "version": "3.0.0", + "dev": true, + "requires": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + } + }, "micromatch": { "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", "dev": true, "requires": { "arr-diff": "^4.0.0", @@ -31108,10 +25600,26 @@ "to-regex": "^3.0.2" } }, + "p-limit": { + "version": "2.3.0", + "dev": true, + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "3.0.0", + "dev": true, + "requires": { + "p-limit": "^2.0.0" + } + }, + "path-exists": { + "version": "3.0.0", + "dev": true + }, "readable-stream": { "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", "dev": true, "requires": { "core-util-is": "~1.0.0", @@ -31125,8 +25633,6 @@ }, "readdirp": { "version": "2.2.1", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz", - "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", "dev": true, "requires": { "graceful-fs": "^4.1.11", @@ -31134,16 +25640,8 @@ "readable-stream": "^2.0.2" } }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, "schema-utils": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", - "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", "dev": true, "requires": { "ajv": "^6.1.0", @@ -31153,23 +25651,39 @@ }, "semver": { "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", "dev": true }, "string_decoder": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "dev": true, "requires": { "safe-buffer": "~5.1.0" } }, + "string-width": { + "version": "3.1.0", + "dev": true, + "requires": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + }, + "dependencies": { + "ansi-regex": { + "version": "4.1.0", + "dev": true + }, + "strip-ansi": { + "version": "5.2.0", + "dev": true, + "requires": { + "ansi-regex": "^4.1.0" + } + } + } + }, "strip-ansi": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", "dev": true, "requires": { "ansi-regex": "^2.0.0" @@ -31177,8 +25691,6 @@ }, "supports-color": { "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", "dev": true, "requires": { "has-flag": "^3.0.0" @@ -31186,20 +25698,73 @@ }, "to-regex-range": { "version": "2.1.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", - "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", "dev": true, "requires": { "is-number": "^3.0.0", "repeat-string": "^1.6.1" } + }, + "wrap-ansi": { + "version": "5.1.0", + "dev": true, + "requires": { + "ansi-styles": "^3.2.0", + "string-width": "^3.0.0", + "strip-ansi": "^5.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "4.1.0", + "dev": true + }, + "strip-ansi": { + "version": "5.2.0", + "dev": true, + "requires": { + "ansi-regex": "^4.1.0" + } + } + } + }, + "ws": { + "version": "6.2.2", + "dev": true, + "requires": { + "async-limiter": "~1.0.0" + } + }, + "y18n": { + "version": "4.0.3", + "dev": true + }, + "yargs": { + "version": "13.3.2", + "dev": true, + "requires": { + "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-parser": { + "version": "13.1.2", + "dev": true, + "requires": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + } } } }, "webpack-log": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/webpack-log/-/webpack-log-2.0.0.tgz", - "integrity": "sha512-cX8G2vR/85UYG59FgkoMamwHUIkSSlV3bBMRsbxVXVUk2j6NleCKjQ/WE9eYg9WY4w25O9w8wKP4rzNZFmUcUg==", "dev": true, "requires": { "ansi-colors": "^3.0.0", @@ -31208,22 +25773,16 @@ "dependencies": { "ansi-colors": { "version": "3.2.4", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-3.2.4.tgz", - "integrity": "sha512-hHUXGagefjN2iRrID63xckIvotOXOojhQKWIPUZ4mNUZ9nLZW+7FMNoE1lOkEhNWYsx/7ysGIuJYCiMAA9FnrA==", "dev": true }, "uuid": { "version": "3.4.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", - "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", "dev": true } } }, "webpack-merge": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.2.0.tgz", - "integrity": "sha512-QBglJBg5+lItm3/Lopv8KDDK01+hjdg2azEwi/4vKJ8ZmGPdtJsTpjtNNOW3a4WiqzXdCATtTudOZJngE7RKkA==", + "version": "5.7.3", "dev": true, "requires": { "clone-deep": "^4.0.1", @@ -31231,63 +25790,69 @@ } }, "webpack-sources": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.4.3.tgz", - "integrity": "sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==", + "version": "2.2.0", "dev": true, "requires": { - "source-list-map": "^2.0.0", - "source-map": "~0.6.1" + "source-list-map": "^2.0.1", + "source-map": "^0.6.1" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "dev": true + } } }, "webpack-subresource-integrity": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/webpack-subresource-integrity/-/webpack-subresource-integrity-1.5.1.tgz", - "integrity": "sha512-uekbQ93PZ9e7BFB8Hl9cFIVYQyQqiXp2ExKk9Zv+qZfH/zHXHrCFAfw1VW0+NqWbTWrs/HnuDrto3+tiPXh//Q==", + "version": "1.5.2", "dev": true, "requires": { "webpack-sources": "^1.3.0" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "dev": true + }, + "webpack-sources": { + "version": "1.4.3", + "dev": true, + "requires": { + "source-list-map": "^2.0.0", + "source-map": "~0.6.1" + } + } } }, "websocket-driver": { - "version": "0.6.5", - "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.6.5.tgz", - "integrity": "sha1-XLJVbOuF9Dc8bYI4qmkchFThOjY=", + "version": "0.7.4", "dev": true, "requires": { + "http-parser-js": ">=0.5.1", + "safe-buffer": ">=5.1.0", "websocket-extensions": ">=0.1.1" } }, "websocket-extensions": { "version": "0.1.4", - "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.4.tgz", - "integrity": "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==", "dev": true }, "whatwg-mimetype": { "version": "2.3.0", - "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz", - "integrity": "sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==", "dev": true }, "which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "version": "2.0.2", "dev": true, "requires": { "isexe": "^2.0.0" } }, "which-module": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", - "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=" + "version": "2.0.0" }, "wide-align": { "version": "1.1.3", - "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz", - "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==", "dev": true, "requires": { "string-width": "^1.0.2 || 2" @@ -31295,14 +25860,14 @@ "dependencies": { "ansi-regex": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "2.0.0", "dev": true }, "string-width": { "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", "dev": true, "requires": { "is-fullwidth-code-point": "^2.0.0", @@ -31311,8 +25876,6 @@ }, "strip-ansi": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", "dev": true, "requires": { "ansi-regex": "^3.0.0" @@ -31320,29 +25883,15 @@ } } }, - "wif": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/wif/-/wif-2.0.6.tgz", - "integrity": "sha1-CNP1IFbGZnkplyb63g1DKudLRwQ=", - "requires": { - "bs58check": "<3.0.0" - } - }, "wildcard": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.0.tgz", - "integrity": "sha512-JcKqAHLPxcdb9KM49dufGXn2x3ssnfjbcaQdLlfZsL9rH9wgDQjUtDxbo8NE0F6SFvydeu1VhZe7hZuHsB2/pw==", "dev": true }, "wordwrap": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", - "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=" + "version": "1.0.0" }, "worker-farm": { "version": "1.7.0", - "resolved": "https://registry.npmjs.org/worker-farm/-/worker-farm-1.7.0.tgz", - "integrity": "sha512-rvw3QTZc8lAxyVrqcSGVm5yP/IJ2UcB3U0graE3LCFoZ0Yn2x4EoVSqJKdB/T5M+FLcRPjz4TDacRf3OCfNUzw==", "dev": true, "requires": { "errno": "~0.1.7" @@ -31350,8 +25899,6 @@ }, "worker-plugin": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/worker-plugin/-/worker-plugin-5.0.0.tgz", - "integrity": "sha512-AXMUstURCxDD6yGam2r4E34aJg6kW85IiaeX72hi+I1cxyaMUtrvVY6sbfpGKAj5e7f68Acl62BjQF5aOOx2IQ==", "dev": true, "requires": { "loader-utils": "^1.1.0" @@ -31359,8 +25906,6 @@ "dependencies": { "json5": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", "dev": true, "requires": { "minimist": "^1.2.0" @@ -31368,8 +25913,6 @@ }, "loader-utils": { "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", - "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", "dev": true, "requires": { "big.js": "^5.2.2", @@ -31380,25 +25923,40 @@ } }, "wrap-ansi": { - "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==", + "version": "7.0.0", + "dev": true, "requires": { - "ansi-styles": "^3.2.0", - "string-width": "^3.0.0", - "strip-ansi": "^5.0.0" + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "color-convert": { + "version": "2.0.1", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "dev": true + } } }, "wrappy": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", "dev": true }, "write-file-atomic": { "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==", "dev": true, "requires": { "imurmurhash": "^0.1.4", @@ -31408,79 +25966,53 @@ } }, "ws": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.1.tgz", - "integrity": "sha512-GIyAXC2cB7LjvpgMt9EKS2ldqr0MTrORaleiOno6TweZ6r3TKtoFQWay/2PceJ3RuBasOHzXNn5Lrw1X0bEjqA==", + "version": "7.5.3", "dev": true, - "requires": { - "async-limiter": "~1.0.0" - } + "requires": {} }, "xtend": { "version": "4.0.2", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", - "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", "dev": true }, "y18n": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.1.tgz", - "integrity": "sha512-wNcy4NvjMYL8gogWWYAO7ZFWFfHcbdbE57tZO8e4cbpj8tfUcwrwqSl3ad8HxpYWCdXcJUCeKKZS62Av1affwQ==" + "version": "5.0.8", + "dev": true }, "yallist": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", "dev": true }, "yaml": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.0.tgz", - "integrity": "sha512-yr2icI4glYaNG+KWONODapy2/jDdMSDnrONSjblABjD9B4Z5LgiircSt8m8sRZFNi08kG9Sm0uSHtEmP3zaEGg==", + "version": "1.10.2", "dev": true }, "yargs": { - "version": "13.3.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz", - "integrity": "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==", + "version": "16.2.0", + "dev": true, "requires": { - "cliui": "^5.0.0", - "find-up": "^3.0.0", - "get-caller-file": "^2.0.1", + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", "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" + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" } }, "yargs-parser": { - "version": "13.1.2", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz", - "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==", - "requires": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - } + "version": "20.2.9", + "dev": true }, "yn": { "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", - "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", "dev": true }, "yocto-queue": { "version": "0.1.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", "dev": true }, "zone.js": { - "version": "0.11.3", - "resolved": "https://registry.npmjs.org/zone.js/-/zone.js-0.11.3.tgz", - "integrity": "sha512-Y4hTHoh4VcxU5BDGAqEoOnOiyT254w6CiHtpQxAJUSMZPyVgdbKf+5R7Mwz6xsPhMIeBXk5rTopRZDpjssTCUg==", + "version": "0.11.4", "requires": { "tslib": "^2.0.0" } diff --git a/ui/package.json b/ui/package.json index d198d7a9a..5ffa09059 100644 --- a/ui/package.json +++ b/ui/package.json @@ -21,29 +21,26 @@ "@angular/platform-browser": "^11.0.0", "@angular/platform-browser-dynamic": "^11.0.0", "@angular/router": "^11.0.0", - "@ionic/angular": "^5.4.0", - "@ionic/storage": "2.2.0", - "@start9labs/emver": "^0.1.1", + "@ionic/angular": "^5.6.0", + "@ionic/storage": "^3.0.0", + "@ionic/storage-angular": "^3.0.0", + "@ngrx/component": "^11.1.1", + "@start9labs/emver": "^0.1.4", "ajv": "^6.12.6", - "angularx-qrcode": "^10.0.11", - "base32.js": "^0.1.0", - "base64url": "^3.0.1", - "bip39": "^3.0.2", - "bitcoinjs-lib": "^5.2.0", + "angularx-qrcode": "^11.0.0", "compare-versions": "^3.5.0", "core-js": "^3.4.0", "handlebars": "^4.7.6", "json-pointer": "^0.6.1", "jsonpointerx": "^1.0.30", - "jsontokens": "^3.0.0", "marked": "^2.0.0", - "rxjs": "^6.6.3", - "uuid": "^8.3.1", - "zone.js": "^0.11.2", - "patch-db-client": "file: ../../../../patch-db-client" + "patch-db-client": "file: ../../../../patch-db-client", + "rxjs": "^6.6.0", + "uuid": "^8.3.0", + "zone.js": "^0.11.2" }, "devDependencies": { - "@angular-devkit/build-angular": "^0.1100.0", + "@angular-devkit/build-angular": "^0.1102.0", "@angular/cli": "^11.0.0", "@angular/compiler": "^11.0.0", "@angular/compiler-cli": "^11.0.0", @@ -51,12 +48,12 @@ "@ionic/angular-toolkit": "^3.0.0", "@ionic/lab": "^3.2.9", "@types/json-pointer": "^1.0.30", - "@types/marked": "^1.1.0", - "@types/node": "^14.11.10", + "@types/marked": "^2.0.0", + "@types/node": "^15.0.0", "@types/uuid": "^8.0.0", - "node-html-parser": "2.0.0", + "node-html-parser": "^3.2.0", "ts-node": "^9.1.0", "tslint": "^6.1.0", - "typescript": "4.0.5" + "typescript": "4.1.5" } } diff --git a/ui/src/app/app-routing.module.ts b/ui/src/app/app-routing.module.ts index ae6f64ad3..076d1fed7 100644 --- a/ui/src/app/app-routing.module.ts +++ b/ui/src/app/app-routing.module.ts @@ -2,6 +2,8 @@ import { NgModule } from '@angular/core' import { PreloadAllModules, RouterModule, Routes } from '@angular/router' import { AuthGuard } from './guards/auth.guard' import { UnauthGuard } from './guards/unauth.guard' +import { MaintenanceGuard } from './guards/maintenance.guard' +import { UnmaintenanceGuard } from './guards/unmaintenance.guard' const routes: Routes = [ { @@ -10,34 +12,32 @@ const routes: Routes = [ path: '', }, { - path: 'authenticate', + path: 'auth', canActivate: [UnauthGuard], - pathMatch: 'full', - loadChildren: () => import('./pages/authenticate/authenticate.module').then( m => m.AuthenticatePageModule), + loadChildren: () => import('./pages/auth-routes/auth-routing.module').then(m => m.AuthRoutingModule), }, { path: 'embassy', - canActivate: [AuthGuard], - canActivateChild: [AuthGuard], + canActivate: [AuthGuard, MaintenanceGuard], + canActivateChild: [AuthGuard, MaintenanceGuard], loadChildren: () => import('./pages/server-routes/server-routing.module').then(m => m.ServerRoutingModule), }, + { + path: 'maintenance', + canActivate: [AuthGuard, UnmaintenanceGuard], + loadChildren: () => import('./pages/maintenance/maintenance.module').then(m => m.MaintenancePageModule), + }, { path: 'notifications', - canActivate: [AuthGuard], - canActivateChild: [AuthGuard], + canActivate: [AuthGuard, MaintenanceGuard], loadChildren: () => import('./pages/notifications/notifications.module').then(m => m.NotificationsPageModule), }, { path: 'services', - canActivate: [AuthGuard], - canActivateChild: [AuthGuard], + canActivate: [AuthGuard, MaintenanceGuard], + canActivateChild: [AuthGuard, MaintenanceGuard], loadChildren: () => import('./pages/apps-routes/apps-routing.module').then(m => m.AppsRoutingModule), }, - // { - // path: 'drives', - // canActivate: [AuthGuard], - // loadChildren: () => import('./pages/server-routes/external-drives/external-drives.module').then( m => m.ExternalDrivesPageModule), - // }, ] @NgModule({ diff --git a/ui/src/app/app.component.html b/ui/src/app/app.component.html index 240e65e89..b30dc6147 100644 --- a/ui/src/app/app.component.html +++ b/ui/src/app/app.component.html @@ -1,14 +1,16 @@ - - + + - + - {{ name }} - + {{ name }} + + + - + - {{page.title}} - {{s}} + {{ page.title }} + {{ badge }} - - - - Welcome - - -

This is the private website of your Start9 Embassy device.

-
-

Please authenticate yourself to continue.

-
-
-
- + - + Logout - +
diff --git a/ui/src/app/app.component.ts b/ui/src/app/app.component.ts index cf4748aad..a06b7124c 100644 --- a/ui/src/app/app.component.ts +++ b/ui/src/app/app.component.ts @@ -1,19 +1,18 @@ import { Component } from '@angular/core' -import { ServerModel, ServerStatus } from './models/server-model' import { Storage } from '@ionic/storage' -import { SyncDaemon } from './services/sync.service' import { AuthService, AuthState } from './services/auth.service' import { ApiService } from './services/api/api.service' -import { Router } from '@angular/router' -import { BehaviorSubject, Observable } from 'rxjs' -import { AppModel } from './models/app-model' -import { filter, take } from 'rxjs/operators' -import { AlertController } from '@ionic/angular' +import { Router, RoutesRecognized } from '@angular/router' +import { distinctUntilChanged, filter, finalize, takeWhile } from 'rxjs/operators' +import { AlertController, ToastController } from '@ionic/angular' import { LoaderService } from './services/loader.service' import { Emver } from './services/emver.service' import { SplitPaneTracker } from './services/split-pane.service' import { LoadingOptions } from '@ionic/core' -import { pauseFor } from './util/misc.util' +import { PatchDbModel } from './models/patch-db/patch-db-model' +import { HttpService } from './services/http.service' +import { ServerStatus } from './models/patch-db/data-model' +import { ConnectionService } from './services/connection.service' @Component({ selector: 'app-root', @@ -21,11 +20,8 @@ import { pauseFor } from './util/misc.util' styleUrls: ['app.component.scss'], }) export class AppComponent { - isUpdating = false - fullPageMenu = true - $showMenuContent$ = new BehaviorSubject(false) - serverName$ : Observable - serverBadge$: Observable + ServerStatus = ServerStatus + showMenu = false selectedIndex = 0 untilLoaded = true appPages = [ @@ -49,92 +45,118 @@ export class AppComponent { url: '/notifications', icon: 'notifications-outline', }, - // { - // title: 'Backup drives', - // url: '/drives', - // icon: 'albums-outline', - // }, ] constructor ( - private readonly serverModel: ServerModel, - private readonly syncDaemon: SyncDaemon, private readonly storage: Storage, - private readonly appModel: AppModel, private readonly authService: AuthService, private readonly router: Router, private readonly api: ApiService, + private readonly http: HttpService, private readonly alertCtrl: AlertController, private readonly loader: LoaderService, private readonly emver: Emver, + private readonly connectionService: ConnectionService, + private readonly toastCtrl: ToastController, readonly splitPane: SplitPaneTracker, + readonly patch: PatchDbModel, ) { // set dark theme document.body.classList.toggle('dark', true) - this.serverName$ = this.serverModel.watch().name - this.serverBadge$ = this.serverModel.watch().badge this.init() } - ionViewDidEnter () { - // weird bug where a browser grabbed the value 'getdots' from the app.component.html preload input field. - // this removes that field after prleloading occurs. - pauseFor(500).then(() => this.untilLoaded = false) - } - async init () { - let fromFresh = true - await this.storage.ready() - await this.authService.restoreCache() + await this.storage.create() + await this.patch.init() + await this.authService.init() await this.emver.init() - this.authService.listen({ - [AuthState.VERIFIED]: async () => { - console.log('verified') - this.api.authenticatedRequestsEnabled = true - await this.serverModel.restoreCache() - await this.appModel.restoreCache() - this.syncDaemon.start() - this.$showMenuContent$.next(true) - if (fromFresh) { - this.router.initialNavigation() - fromFresh = false - } - }, - [AuthState.UNVERIFIED]: () => { - console.log('unverified') - this.api.authenticatedRequestsEnabled = false - this.serverModel.clear() - this.appModel.clear() - this.syncDaemon.stop() + this.router.initialNavigation() + + // watch auth + this.authService.watch$() + .subscribe(auth => { + // VERIFIED + if (auth === AuthState.VERIFIED) { + this.http.authReqEnabled = true + this.showMenu = true + this.patch.start() + // watch network + this.watchNetwork(auth) + // watch router to highlight selected menu item + this.watchRouter(auth) + // watch status to display/hide maintenance page + this.watchStatus(auth) + // watch unread notification count to display toast + this.watchNotifications(auth) + // UNVERIFIED + } else if (auth === AuthState.UNVERIFIED) { + this.http.authReqEnabled = false + this.showMenu = false + this.patch.stop() this.storage.clear() - this.router.navigate(['/authenticate'], { replaceUrl: true }) - this.$showMenuContent$.next(false) - if (fromFresh) { - this.router.initialNavigation() - fromFresh = false - } - }, - }) - - this.serverModel.watch().status.subscribe(s => { - this.isUpdating = (s === ServerStatus.UPDATING) - }) - - this.router.events.pipe(filter(e => !!(e as any).urlAfterRedirects)).subscribe((e: any) => { - const appPageIndex = this.appPages.findIndex( - appPage => (e.urlAfterRedirects || e.url || '').startsWith(appPage.url), - ) - if (appPageIndex > -1) this.selectedIndex = appPageIndex - - // TODO: while this works, it is dangerous and impractical. - if (e.urlAfterRedirects !== '/embassy' && e.urlAfterRedirects !== '/authenticate' && this.isUpdating) { - this.router.navigateByUrl('/embassy') + this.router.navigate(['/auth'], { replaceUrl: true }) } }) - this.api.watch401$().subscribe(() => { - this.authService.setAuthStateUnverified() - return this.api.postLogout() + + this.http.watch401$().subscribe(() => { + this.authService.setUnverified() + }) + } + + private watchNetwork (auth: AuthState): void { + this.connectionService.monitor$() + .pipe( + distinctUntilChanged(), + takeWhile(() => auth === AuthState.VERIFIED), + ) + .subscribe(c => { + console.log('CONNECTION CHANGED', c) + }) + } + + private watchRouter (auth: AuthState): void { + this.router.events + .pipe( + filter((e: RoutesRecognized) => !!e.urlAfterRedirects), + takeWhile(() => auth === AuthState.VERIFIED), + ) + .subscribe(e => { + const appPageIndex = this.appPages.findIndex( + appPage => e.urlAfterRedirects.startsWith(appPage.url), + ) + if (appPageIndex > -1) this.selectedIndex = appPageIndex + }) + } + + private watchStatus (auth: AuthState): void { + this.patch.watch$('server-info', 'status') + .pipe( + takeWhile(() => auth === AuthState.VERIFIED), + ) + .subscribe(status => { + const maintenance = '/maintenance' + const url = this.router.url + if (status === ServerStatus.Running && url.startsWith(maintenance)) { + this.router.navigate([''], { replaceUrl: true }) + } + if ([ServerStatus.Updating, ServerStatus.BackingUp].includes(status) && !url.startsWith(maintenance)) { + this.router.navigate([maintenance], { replaceUrl: true }) + } + }) + } + + private watchNotifications (auth: AuthState): void { + let previous: number + this.patch.watch$('server-info', 'unread-notification-count') + .pipe( + takeWhile(() => auth === AuthState.VERIFIED), + finalize(() => console.log('FINALIZING!!!')), + ) + .subscribe(count => { + if (previous !== undefined && count > previous) this.presentToastNotifications() + previous = count }) } @@ -161,20 +183,45 @@ export class AppComponent { } private async logout () { - this.serverName$.pipe(take(1)).subscribe(name => { - this.loader.of(LoadingSpinner(`Logging out ${name || ''}...`)) - .displayDuringP(this.api.postLogout()) - .then(() => this.authService.setAuthStateUnverified()) - .catch(e => this.setError(e)) - }) + this.loader.of(LoadingSpinner('Logging out...')) + .displayDuringP(this.api.logout({ })) + .then(() => this.authService.setUnverified()) + .catch(e => this.setError(e)) } - async setError (e: Error) { + private async presentToastNotifications () { + const toast = await this.toastCtrl.create({ + header: 'Embassy', + message: `New notifications`, + position: 'bottom', + duration: 4000, + cssClass: 'notification-toast', + buttons: [ + { + side: 'start', + icon: 'close', + handler: () => { + return true + }, + }, + { + side: 'end', + text: 'View', + handler: () => { + this.router.navigate(['/notifications']) + }, + }, + ], + }) + await toast.present() + } + + private async setError (e: Error) { console.error(e) await this.presentError(e.message) } - async presentError (e: string) { + private async presentError (e: string) { const alert = await this.alertCtrl.create({ backdropDismiss: true, message: `Exception on logout: ${e}`, @@ -189,7 +236,7 @@ export class AppComponent { } splitPaneVisible (e: any) { - this.splitPane.$menuFixedOpenOnLeft$.next(e.detail.visible) + this.splitPane.menuFixedOpenOnLeft$.next(e.detail.visible) } } diff --git a/ui/src/app/app.module.ts b/ui/src/app/app.module.ts index 1746d192f..781d83f95 100644 --- a/ui/src/app/app.module.ts +++ b/ui/src/app/app.module.ts @@ -2,20 +2,23 @@ import { NgModule, CUSTOM_ELEMENTS_SCHEMA } from '@angular/core' import { BrowserModule } from '@angular/platform-browser' import { RouteReuseStrategy } from '@angular/router' import { IonicModule, IonicRouteStrategy } from '@ionic/angular' -import { IonicStorageModule } from '@ionic/storage' +import { Drivers } from '@ionic/storage' +import { IonicStorageModule } from '@ionic/storage-angular' import { HttpClientModule } from '@angular/common/http' import { AppComponent } from './app.component' import { AppRoutingModule } from './app-routing.module' import { ApiService } from './services/api/api.service' import { ApiServiceFactory } from './services/api/api.service.factory' -import { AppModel } from './models/app-model' +import { PatchDbModelFactory } from './models/patch-db/patch-db-model.factory' import { HttpService } from './services/http.service' -import { ServerModel } from './models/server-model' import { ConfigService } from './services/config.service' import { QRCodeModule } from 'angularx-qrcode' import { APP_CONFIG_COMPONENT_MAPPING } from './modals/app-config-injectable/modal-injectable-token' -import { appConfigComponents } from './modals/app-config-injectable/modal-injectable-value'; +import { appConfigComponents } from './modals/app-config-injectable/modal-injectable-value' import { OSWelcomePageModule } from './modals/os-welcome/os-welcome.module' +import { PatchDbModel } from './models/patch-db/patch-db-model' +import { LocalStorageBootstrap } from './models/patch-db/local-storage-bootstrap' +import { SharingModule } from './modules/sharing.module' @NgModule({ declarations: [AppComponent], @@ -25,13 +28,21 @@ import { OSWelcomePageModule } from './modals/os-welcome/os-welcome.module' BrowserModule, IonicModule.forRoot(), AppRoutingModule, - IonicStorageModule.forRoot(), + IonicStorageModule.forRoot({ + storeName: '_embassykv', + dbKey: '_embassykey', + name: '_embassystorage', + driverOrder: [Drivers.LocalStorage, Drivers.IndexedDB], + }), QRCodeModule, OSWelcomePageModule, + SharingModule, ], providers: [ + Storage, { provide: RouteReuseStrategy, useClass: IonicRouteStrategy }, - { provide: ApiService, useFactory: ApiServiceFactory, deps: [ConfigService, HttpService, AppModel, ServerModel] }, + { provide: ApiService , useFactory: ApiServiceFactory, deps: [ConfigService, HttpService] }, + { provide: PatchDbModel, useFactory: PatchDbModelFactory, deps: [ConfigService, LocalStorageBootstrap, ApiService] }, { provide: APP_CONFIG_COMPONENT_MAPPING, useValue: appConfigComponents }, ], bootstrap: [AppComponent], diff --git a/ui/src/app/components/app-backup-confirmation/app-backup-confirmation.component.ts b/ui/src/app/components/app-backup-confirmation/app-backup-confirmation.component.ts deleted file mode 100644 index b73fa1fe7..000000000 --- a/ui/src/app/components/app-backup-confirmation/app-backup-confirmation.component.ts +++ /dev/null @@ -1,45 +0,0 @@ -import { Component, Input, OnInit } from '@angular/core' -import { ModalController } from '@ionic/angular' -import { BehaviorSubject } from 'rxjs' -import { AppInstalledFull } from 'src/app/models/app-types' -import { DiskPartition } from 'src/app/models/server-model' - -@Component({ - selector: 'app-backup-confirmation', - templateUrl: './app-backup-confirmation.component.html', - styleUrls: ['./app-backup-confirmation.component.scss'], -}) -export class AppBackupConfirmationComponent implements OnInit { - unmasked = false - password: string - $error$: BehaviorSubject = new BehaviorSubject('') - - // TODO: EJECT-DISKS pass this through the modalCtrl once ejecting disks is an option in the UI. - eject = true - message: string - - @Input() app: AppInstalledFull - @Input() partition: DiskPartition - - constructor (private readonly modalCtrl: ModalController) { } - ngOnInit () { - this.message = `Enter your master password to create an encrypted backup of ${this.app.title} to "${this.partition.label || this.partition.logicalname}".` - } - - toggleMask () { - this.unmasked = !this.unmasked - } - - cancel () { - this.modalCtrl.dismiss({ cancel: true }) - } - - submit () { - if (!this.password || this.password.length < 12) { - this.$error$.next('Password must be at least 12 characters in length.') - return - } - const { password } = this - this.modalCtrl.dismiss({ password }) - } -} diff --git a/ui/src/app/components/badge-menu-button/badge-menu.component.html b/ui/src/app/components/badge-menu-button/badge-menu.component.html index 738173e18..d054d9d99 100644 --- a/ui/src/app/components/badge-menu-button/badge-menu.component.html +++ b/ui/src/app/components/badge-menu-button/badge-menu.component.html @@ -1,12 +1,4 @@
- - + {{ badge$ | ngrxPush }}
diff --git a/ui/src/app/components/badge-menu-button/badge-menu.component.scss b/ui/src/app/components/badge-menu-button/badge-menu.component.scss index 26c065665..74b1d1001 100644 --- a/ui/src/app/components/badge-menu-button/badge-menu.component.scss +++ b/ui/src/app/components/badge-menu-button/badge-menu.component.scss @@ -1,17 +1,18 @@ -.ios-badge { - background-color: var(--ion-color-start9); - position: absolute; - top: 1px; - left: 62%; - border-radius: 5px; - z-index: 1; -} +// .ios-badge { +// background-color: var(--ion-color-start9); +// position: absolute; +// top: 1px; +// left: 62%; +// border-radius: 5px; +// z-index: 1; +// } .md-badge { background-color: var(--ion-color-start9); position: absolute; - top: -2px; + top: -8px; left: 56%; border-radius: 5px; z-index: 1; + font-size: 80%; } diff --git a/ui/src/app/components/badge-menu-button/badge-menu.component.ts b/ui/src/app/components/badge-menu-button/badge-menu.component.ts index 3b7a0e858..156e00dad 100644 --- a/ui/src/app/components/badge-menu-button/badge-menu.component.ts +++ b/ui/src/app/components/badge-menu-button/badge-menu.component.ts @@ -1,9 +1,7 @@ import { Component } from '@angular/core' -import { ServerModel } from '../../models/server-model' import { Observable } from 'rxjs' -import { map } from 'rxjs/operators' import { SplitPaneTracker } from 'src/app/services/split-pane.service' -import { isPlatform } from '@ionic/angular' +import { PatchDbModel } from 'src/app/models/patch-db/patch-db-model' @Component({ selector: 'badge-menu-button', @@ -12,16 +10,14 @@ import { isPlatform } from '@ionic/angular' }) export class BadgeMenuComponent { - badge$: Observable + badge$: Observable menuFixedOpen$: Observable - isIos: boolean constructor ( - private readonly serverModel: ServerModel, private readonly splitPane: SplitPaneTracker, + private readonly patch: PatchDbModel, ) { - this.menuFixedOpen$ = this.splitPane.$menuFixedOpenOnLeft$.asObservable() - this.badge$ = this.serverModel.watch().badge.pipe(map(i => i > 0)) - this.isIos = isPlatform('ios') + this.menuFixedOpen$ = this.splitPane.menuFixedOpenOnLeft$.asObservable() + this.badge$ = this.patch.watch$('server-info', 'unread-notification-count') } } diff --git a/ui/src/app/components/config-header/config-header.component.ts b/ui/src/app/components/config-header/config-header.component.ts index b7fddf9e5..27645b628 100644 --- a/ui/src/app/components/config-header/config-header.component.ts +++ b/ui/src/app/components/config-header/config-header.component.ts @@ -1,5 +1,5 @@ import { Component, Input } from '@angular/core' -import { ValueSpec } from 'src/app/app-config/config-types' +import { ValueSpec } from 'src/app/pkg-config/config-types' @Component({ selector: 'config-header', diff --git a/ui/src/app/components/dependency-list/dependency-list.component.html b/ui/src/app/components/dependency-list/dependency-list.component.html deleted file mode 100644 index b33e5ec20..000000000 --- a/ui/src/app/components/dependency-list/dependency-list.component.html +++ /dev/null @@ -1,14 +0,0 @@ -
- - - - -
\ No newline at end of file diff --git a/ui/src/app/components/dependency-list/dependency-list.component.module.ts b/ui/src/app/components/dependency-list/dependency-list.component.module.ts deleted file mode 100644 index 3b848aabf..000000000 --- a/ui/src/app/components/dependency-list/dependency-list.component.module.ts +++ /dev/null @@ -1,28 +0,0 @@ -import { NgModule } from '@angular/core' -import { CommonModule } from '@angular/common' -import { DependencyListComponent } from './dependency-list.component' -import { IonicModule } from '@ionic/angular' -import { RouterModule } from '@angular/router' -import { SharingModule } from 'src/app/modules/sharing.module' -import { InformationPopoverComponentModule } from '../information-popover/information-popover.component.module' -import { StatusComponentModule } from '../status/status.component.module' -import { InstalledDependencyItemComponentModule } from './installed-dependency-item/installed-dependency-item.component.module' -import { MarketplaceDependencyItemComponentModule } from './marketplace-dependency-item/marketplace-dependency-item.component.module' - -@NgModule({ - declarations: [ - DependencyListComponent, - ], - imports: [ - CommonModule, - IonicModule, - RouterModule.forChild([]), - SharingModule, - InformationPopoverComponentModule, - StatusComponentModule, - InstalledDependencyItemComponentModule, - MarketplaceDependencyItemComponentModule, - ], - exports: [DependencyListComponent], -}) -export class DependencyListComponentModule { } diff --git a/ui/src/app/components/dependency-list/dependency-list.component.ts b/ui/src/app/components/dependency-list/dependency-list.component.ts deleted file mode 100644 index c05883c14..000000000 --- a/ui/src/app/components/dependency-list/dependency-list.component.ts +++ /dev/null @@ -1,30 +0,0 @@ -import { Component, Input } from '@angular/core' -import { BehaviorSubject } from 'rxjs' -import { AppDependency, BaseApp, isOptional } from 'src/app/models/app-types' - -@Component({ - selector: 'dependency-list', - templateUrl: './dependency-list.component.html', - styleUrls: ['./dependency-list.component.scss'], -}) -export class DependencyListComponent { - @Input() depType: 'installed' | 'available' = 'available' - @Input() hostApp: BaseApp - @Input() dependencies: AppDependency[] - dependenciesToDisplay: AppDependency[] - @Input() $loading$: BehaviorSubject = new BehaviorSubject(true) - - constructor () { } - - ngOnChanges () { - this.dependenciesToDisplay = this.dependencies.filter(dep => - this.depType === 'available' ? !isOptional(dep) : true, - ) - } - - ngOnInit () { - this.dependenciesToDisplay = this.dependencies.filter(dep => - this.depType === 'available' ? !isOptional(dep) : true, - ) - } -} diff --git a/ui/src/app/components/dependency-list/installed-dependency-item/installed-dependency-item.component.html b/ui/src/app/components/dependency-list/installed-dependency-item/installed-dependency-item.component.html deleted file mode 100644 index 524cfc1ef..000000000 --- a/ui/src/app/components/dependency-list/installed-dependency-item/installed-dependency-item.component.html +++ /dev/null @@ -1,33 +0,0 @@ - - - - -
- -
- -

{{ dep.title }}

-

{{ dep.versionSpec }}

-

{{statusText}}

-

Refreshing

-
- - - {{actionText}} - - -
-
- -
- -
- -
-
-
-
- diff --git a/ui/src/app/components/dependency-list/installed-dependency-item/installed-dependency-item.component.module.ts b/ui/src/app/components/dependency-list/installed-dependency-item/installed-dependency-item.component.module.ts deleted file mode 100644 index e362b55d0..000000000 --- a/ui/src/app/components/dependency-list/installed-dependency-item/installed-dependency-item.component.module.ts +++ /dev/null @@ -1,22 +0,0 @@ -import { NgModule } from '@angular/core' -import { CommonModule } from '@angular/common' -import { InstalledDependencyItemComponent } from './installed-dependency-item.component' -import { IonicModule } from '@ionic/angular' -import { RouterModule } from '@angular/router' -import { SharingModule } from 'src/app/modules/sharing.module' -import { InformationPopoverComponentModule } from '../../information-popover/information-popover.component.module' -import { StatusComponentModule } from '../../status/status.component.module' - -@NgModule({ - declarations: [InstalledDependencyItemComponent], - imports: [ - CommonModule, - IonicModule, - RouterModule.forChild([]), - SharingModule, - InformationPopoverComponentModule, - StatusComponentModule, - ], - exports: [InstalledDependencyItemComponent], -}) -export class InstalledDependencyItemComponentModule { } diff --git a/ui/src/app/components/dependency-list/installed-dependency-item/installed-dependency-item.component.scss b/ui/src/app/components/dependency-list/installed-dependency-item/installed-dependency-item.component.scss deleted file mode 100644 index 622ac9acd..000000000 --- a/ui/src/app/components/dependency-list/installed-dependency-item/installed-dependency-item.component.scss +++ /dev/null @@ -1,30 +0,0 @@ - -.spinner { - background: rgba(0,0,0,0); - border-radius: 100px; - display: flex; - flex-direction: column; - align-items: center; - justify-content: center; - margin: 5px; -} - -.badge { - position: absolute; width: 2.5vh; - height: 2.5vh; - border-radius: 50px; - left: -1vh; - top: -1vh; -} - -.xSmallText { - font-size: x-small !important; -} - -.mediumText { - font-size: medium !important; -} - -.opacityUp { - opacity: 0.75; -} \ No newline at end of file diff --git a/ui/src/app/components/dependency-list/installed-dependency-item/installed-dependency-item.component.ts b/ui/src/app/components/dependency-list/installed-dependency-item/installed-dependency-item.component.ts deleted file mode 100644 index ff89f482a..000000000 --- a/ui/src/app/components/dependency-list/installed-dependency-item/installed-dependency-item.component.ts +++ /dev/null @@ -1,113 +0,0 @@ -import { Component, Input, OnInit } from '@angular/core' -import { NavigationExtras } from '@angular/router' -import { AlertController, NavController } from '@ionic/angular' -import { BehaviorSubject, Observable } from 'rxjs' -import { AppStatus } from 'src/app/models/app-model' -import { AppDependency, BaseApp, DependencyViolationSeverity, getInstalledViolationSeverity, getViolationSeverity, isInstalling, isMisconfigured, isMissing, isNotRunning, isVersionMismatch } from 'src/app/models/app-types' -import { Recommendation } from '../../recommendation-button/recommendation-button.component' - -@Component({ - selector: 'installed-dependency-item', - templateUrl: './installed-dependency-item.component.html', - styleUrls: ['./installed-dependency-item.component.scss'], -}) -export class InstalledDependencyItemComponent implements OnInit { - @Input() dep: AppDependency - @Input() hostApp: BaseApp - @Input() $loading$: BehaviorSubject - - isLoading$: Observable - color: string - installing = false - badgeStyle: string - violationSeverity: DependencyViolationSeverity - statusText: string - actionText: string - action: () => Promise - - constructor (private readonly navCtrl: NavController, private readonly alertCtrl: AlertController) { } - - ngOnInit () { - this.violationSeverity = getInstalledViolationSeverity(this.dep) - - const { color, statusText, installing, actionText, action } = this.getValues() - - this.color = color - this.statusText = statusText - this.installing = installing - this.actionText = actionText - this.action = action - this.badgeStyle = `background: radial-gradient(var(--ion-color-${this.color}) 40%, transparent)` - } - - isDanger () { - // installed dep violations are either REQUIRED or NONE, by getInstalledViolationSeverity above. - return [DependencyViolationSeverity.REQUIRED].includes(this.violationSeverity) - } - - getValues (): { color: string, statusText: string, installing: boolean, actionText: string, action: () => Promise } { - if (isInstalling(this.dep)) return { color: 'primary', statusText: 'Installing', installing: true, actionText: undefined, action: () => this.view() } - if (!this.isDanger()) return { color: 'success', statusText: 'Satisfied', installing: false, actionText: 'View', action: () => this.view() } - - if (isMissing(this.dep)) return { color: 'warning', statusText: 'Not Installed', installing: false, actionText: 'Install', action: () => this.install() } - if (isVersionMismatch(this.dep)) return { color: 'warning', statusText: 'Incompatible Version Installed', installing: false, actionText: 'Update', action: () => this.install() } - if (isMisconfigured(this.dep)) return { color: 'warning', statusText: 'Incompatible Config', installing: false, actionText: 'Configure', action: () => this.configure() } - if (isNotRunning(this.dep)) return { color: 'warning', statusText: 'Not Running', installing: false, actionText: 'View', action: () => this.view() } - return { color: 'success', statusText: 'Satisfied', installing: false, actionText: 'View', action: () => this.view() } - } - - async view () { - return this.navCtrl.navigateForward(`/services/installed/${this.dep.id}`) - } - - async install () { - const verb = 'requires' - const description = `${this.hostApp.title} ${verb} an install of ${this.dep.title} satisfying ${this.dep.versionSpec}.` - - const whyDependency = this.dep.description - - const installationRecommendation: Recommendation = { - iconURL: this.hostApp.iconURL, - appId: this.hostApp.id, - description, - title: this.hostApp.title, - versionSpec: this.dep.versionSpec, - whyDependency, - } - const navigationExtras: NavigationExtras = { - state: { installationRecommendation }, - } - - return this.navCtrl.navigateForward(`/services/marketplace/${this.dep.id}`, navigationExtras) - } - - async configure () { - if (this.dep.violation.name !== 'incompatible-config') return - const configViolationDesc = this.dep.violation.ruleViolations - - const configViolationFormatted = - `
    ${configViolationDesc.map(d => `
  • ${d}
  • `).join('\n')}
` - - const configRecommendation: Recommendation = { - iconURL: this.hostApp.iconURL, - appId: this.hostApp.id, - description: configViolationFormatted, - title: this.hostApp.title, - } - const navigationExtras: NavigationExtras = { - state: { configRecommendation }, - } - - return this.navCtrl.navigateForward(`/services/installed/${this.dep.id}/config`, navigationExtras) - } - - async presentAlertDescription() { - const description = `

${this.dep.description}<\p>` - - const alert = await this.alertCtrl.create({ - backdropDismiss: true, - message: description, - }) - await alert.present() - } -} diff --git a/ui/src/app/components/dependency-list/marketplace-dependency-item/marketplace-dependency-item.component.html b/ui/src/app/components/dependency-list/marketplace-dependency-item/marketplace-dependency-item.component.html deleted file mode 100644 index 0f25d3732..000000000 --- a/ui/src/app/components/dependency-list/marketplace-dependency-item/marketplace-dependency-item.component.html +++ /dev/null @@ -1,45 +0,0 @@ - - - - -

- - - -

{{ dep.title }} - (recommended) -

-

{{ dep.versionSpec }}

-

{{statusText}}

-

Refreshing

-
- - - - - - - - {{actionText}} - - -
-
- -
- -
- -
-
- - -
-
-
- - diff --git a/ui/src/app/components/dependency-list/marketplace-dependency-item/marketplace-dependency-item.component.module.ts b/ui/src/app/components/dependency-list/marketplace-dependency-item/marketplace-dependency-item.component.module.ts deleted file mode 100644 index de8204c12..000000000 --- a/ui/src/app/components/dependency-list/marketplace-dependency-item/marketplace-dependency-item.component.module.ts +++ /dev/null @@ -1,22 +0,0 @@ -import { NgModule } from '@angular/core' -import { CommonModule } from '@angular/common' -import { MarketplaceDependencyItemComponent } from './marketplace-dependency-item.component' -import { IonicModule } from '@ionic/angular' -import { RouterModule } from '@angular/router' -import { SharingModule } from 'src/app/modules/sharing.module' -import { InformationPopoverComponentModule } from '../../information-popover/information-popover.component.module' -import { StatusComponentModule } from '../../status/status.component.module' - -@NgModule({ - declarations: [MarketplaceDependencyItemComponent], - imports: [ - CommonModule, - IonicModule, - RouterModule.forChild([]), - SharingModule, - InformationPopoverComponentModule, - StatusComponentModule, - ], - exports: [MarketplaceDependencyItemComponent], -}) -export class MarketplaceDependencyItemComponentModule { } diff --git a/ui/src/app/components/dependency-list/marketplace-dependency-item/marketplace-dependency-item.component.scss b/ui/src/app/components/dependency-list/marketplace-dependency-item/marketplace-dependency-item.component.scss deleted file mode 100644 index 7021720ab..000000000 --- a/ui/src/app/components/dependency-list/marketplace-dependency-item/marketplace-dependency-item.component.scss +++ /dev/null @@ -1,35 +0,0 @@ - -.spinner { - background: rgba(0,0,0,0); - border-radius: 100px; - display: flex; - flex-direction: column; - align-items: center; - justify-content: center; - margin: 14px; -} - -.badge { - position: absolute; width: 2.5vh; - height: 2.5vh; - border-radius: 50px; - left: -1vh; - top: -1vh; -} - -.xSmallText { - font-size: x-small !important; -} - -.mediumText { - font-size: medium !important; -} - -.opacityUp { - opacity: 0.75; -} - -.dependency { - --padding-start: 20px; - --padding-end: 2px; -} \ No newline at end of file diff --git a/ui/src/app/components/dependency-list/marketplace-dependency-item/marketplace-dependency-item.component.ts b/ui/src/app/components/dependency-list/marketplace-dependency-item/marketplace-dependency-item.component.ts deleted file mode 100644 index 66171dbba..000000000 --- a/ui/src/app/components/dependency-list/marketplace-dependency-item/marketplace-dependency-item.component.ts +++ /dev/null @@ -1,88 +0,0 @@ -import { Component, Input, OnInit } from '@angular/core' -import { NavigationExtras } from '@angular/router' -import { NavController } from '@ionic/angular' -import { BehaviorSubject, Observable } from 'rxjs' -import { AppDependency, BaseApp, DependencyViolationSeverity, getViolationSeverity, isOptional, isMissing, isInstalling, isRecommended, isVersionMismatch } from 'src/app/models/app-types' -import { Recommendation } from '../../recommendation-button/recommendation-button.component' - -@Component({ - selector: 'marketplace-dependency-item', - templateUrl: './marketplace-dependency-item.component.html', - styleUrls: ['./marketplace-dependency-item.component.scss'], -}) -export class MarketplaceDependencyItemComponent implements OnInit { - @Input() dep: AppDependency - @Input() hostApp: BaseApp - @Input() $loading$: BehaviorSubject - - presentAlertDescription = false - - isLoading$: Observable - color: string - installing = false - recommended = false - badgeStyle: string - violationSeverity: DependencyViolationSeverity - statusText: string - actionText: 'View' | 'Get' - - descriptionText: string - - constructor ( - private readonly navCtrl: NavController, - ) { } - - ngOnInit () { - this.violationSeverity = getViolationSeverity(this.dep) - if (isOptional(this.dep)) throw new Error('Do not display optional deps, satisfied or otherwise, on the AAL') - - const { actionText, color, statusText, installing } = this.getValues() - - this.color = color - this.statusText = statusText - this.installing = installing - this.recommended = isRecommended(this.dep) - this.actionText = actionText - this.badgeStyle = `background: radial-gradient(var(--ion-color-${this.color}) 40%, transparent)` - this.descriptionText = `

${this.dep.description}<\p>` - if (this.recommended) { - this.descriptionText = this.descriptionText + `

This service is not required: ${this.dep.optional}<\p>` - } - } - - isDanger (): boolean { - return [DependencyViolationSeverity.REQUIRED, DependencyViolationSeverity.RECOMMENDED].includes(this.violationSeverity) - } - - getValues (): { color: string, statusText: string, installing: boolean, actionText: 'View' | 'Get' } { - if (isInstalling(this.dep)) return { color: 'primary', statusText: 'Installing', installing: true, actionText: undefined } - if (!this.isDanger()) return { color: 'success', statusText: 'Satisfied', installing: false, actionText: 'View' } - if (isMissing(this.dep)) return { color: 'warning', statusText: 'Not Installed', installing: false, actionText: 'Get' } - if (isVersionMismatch(this.dep)) return { color: 'warning', statusText: 'Incompatible Version Installed', installing: false, actionText: 'Get' } - return { color: 'success', statusText: 'Satisfied', installing: false, actionText: 'View' } - } - - async toInstall () { - if (this.actionText === 'View') return this.navCtrl.navigateForward(`/services/marketplace/${this.dep.id}`) - - const verb = this.violationSeverity === DependencyViolationSeverity.REQUIRED ? 'requires' : 'recommends' - const description = `${this.hostApp.title} ${verb} an install of ${this.dep.title} satisfying ${this.dep.versionSpec}.` - - const whyDependency = this.dep.description - - const installationRecommendation: Recommendation = { - iconURL: this.hostApp.iconURL, - appId: this.hostApp.id, - description, - title: this.hostApp.title, - versionSpec: this.dep.versionSpec, - whyDependency, - } - const navigationExtras: NavigationExtras = { - state: { installationRecommendation }, - } - - return this.navCtrl.navigateForward(`/services/marketplace/${this.dep.id}`, navigationExtras) - } - -} diff --git a/ui/src/app/components/error-message/error-message.component.html b/ui/src/app/components/error-message/error-message.component.html deleted file mode 100644 index 83112c02f..000000000 --- a/ui/src/app/components/error-message/error-message.component.html +++ /dev/null @@ -1,6 +0,0 @@ - -

{{ error }}

- - - - diff --git a/ui/src/app/components/error-message/error-message.component.module.ts b/ui/src/app/components/error-message/error-message.component.module.ts deleted file mode 100644 index 6f445372d..000000000 --- a/ui/src/app/components/error-message/error-message.component.module.ts +++ /dev/null @@ -1,20 +0,0 @@ -import { NgModule } from '@angular/core' -import { CommonModule } from '@angular/common' -import { ErrorMessageComponent } from './error-message.component' -import { IonicModule } from '@ionic/angular' -import { RouterModule } from '@angular/router' -import { SharingModule } from 'src/app/modules/sharing.module' - -@NgModule({ - declarations: [ - ErrorMessageComponent, - ], - imports: [ - CommonModule, - IonicModule, - RouterModule.forChild([]), - SharingModule, - ], - exports: [ErrorMessageComponent], -}) -export class ErrorMessageComponentModule { } diff --git a/ui/src/app/components/error-message/error-message.component.scss b/ui/src/app/components/error-message/error-message.component.scss deleted file mode 100644 index c500626a7..000000000 --- a/ui/src/app/components/error-message/error-message.component.scss +++ /dev/null @@ -1,10 +0,0 @@ -.error-message { - --background: var(--ion-color-danger); - margin: 12px; - border-radius: 3px; - font-weight: bold; -} - -.legacy-error-message { - margin: 5px; -} \ No newline at end of file diff --git a/ui/src/app/components/error-message/error-message.component.ts b/ui/src/app/components/error-message/error-message.component.ts deleted file mode 100644 index 313dfb3aa..000000000 --- a/ui/src/app/components/error-message/error-message.component.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { Component, Input, OnInit } from '@angular/core' -import { BehaviorSubject } from 'rxjs' - -@Component({ - selector: 'error-message', - templateUrl: './error-message.component.html', - styleUrls: ['./error-message.component.scss'], -}) -export class ErrorMessageComponent implements OnInit { - @Input() $error$: BehaviorSubject = new BehaviorSubject(undefined) - @Input() dismissable = true - - constructor () { } - ngOnInit () { } - - clear () { - this.$error$.next(undefined) - } -} diff --git a/ui/src/app/components/install-wizard/complete/complete.component.html b/ui/src/app/components/install-wizard/complete/complete.component.html index 226a014b3..a6c563952 100644 --- a/ui/src/app/components/install-wizard/complete/complete.component.html +++ b/ui/src/app/components/install-wizard/complete/complete.component.html @@ -1,7 +1,7 @@ -
+
- + {{successText}}
@@ -11,7 +11,7 @@
-
+
{{label}}
\ No newline at end of file diff --git a/ui/src/app/components/install-wizard/complete/complete.component.ts b/ui/src/app/components/install-wizard/complete/complete.component.ts index 46f4f8a17..e6ecb067a 100644 --- a/ui/src/app/components/install-wizard/complete/complete.component.ts +++ b/ui/src/app/components/install-wizard/complete/complete.component.ts @@ -28,17 +28,18 @@ export class CompleteComponent implements OnInit, Loadable { } - $loading$ = new BehaviorSubject(false) - $color$ = new BehaviorSubject('medium') - $cancel$ = new Subject() + loading$ = new BehaviorSubject(false) + color$ = new BehaviorSubject('medium') + cancel$ = new Subject() label: string summary: string successText: string load () { - markAsLoadingDuring$(this.$loading$, from(this.params.executeAction())).pipe(takeUntil(this.$cancel$)).subscribe( - { error: e => this.transitions.error(new Error(`${this.params.action} failed: ${e.message || e}`)), + markAsLoadingDuring$(this.loading$, from(this.params.executeAction())).pipe(takeUntil(this.cancel$)).subscribe( + { + error: e => this.transitions.error(new Error(`${this.params.action} failed: ${e.message || e}`)), complete: () => this.params.skipCompletionDialogue && this.transitions.final(), }, ) @@ -50,37 +51,37 @@ export class CompleteComponent implements OnInit, Loadable { case 'install': this.summary = `Installation of ${this.params.title} is now in progress. You will receive a notification when the installation has completed.` this.label = `${capitalizeFirstLetter(this.params.verb)} ${this.params.title}...` - this.$color$.next('primary') + this.color$.next('primary') this.successText = 'In Progress' break case 'downgrade': this.summary = `Downgrade for ${this.params.title} is now in progress. You will receive a notification when the downgrade has completed.` this.label = `${capitalizeFirstLetter(this.params.verb)} ${this.params.title}...` - this.$color$.next('primary') + this.color$.next('primary') this.successText = 'In Progress' break case 'update': this.summary = `Update for ${this.params.title} is now in progress. You will receive a notification when the update has completed.` this.label = `${capitalizeFirstLetter(this.params.verb)} ${this.params.title}...` - this.$color$.next('primary') + this.color$.next('primary') this.successText = 'In Progress' break case 'uninstall': this.summary = `${capitalizeFirstLetter(this.params.title)} has been successfully uninstalled.` this.label = `${capitalizeFirstLetter(this.params.verb)} ${this.params.title}...` - this.$color$.next('success') + this.color$.next('success') this.successText = 'Success' break case 'stop': this.summary = `${capitalizeFirstLetter(this.params.title)} has been successfully stopped.` this.label = `${capitalizeFirstLetter(this.params.verb)} ${this.params.title}...` - this.$color$.next('success') + this.color$.next('success') this.successText = 'Success' break case 'configure': this.summary = `New config for ${this.params.title} has been successfully saved.` this.label = `${capitalizeFirstLetter(this.params.verb)} ${this.params.title}...` - this.$color$.next('success') + this.color$.next('success') this.successText = 'Success' break } diff --git a/ui/src/app/components/install-wizard/dependencies/dependencies.component.html b/ui/src/app/components/install-wizard/dependencies/dependencies.component.html deleted file mode 100644 index 3363ddfcf..000000000 --- a/ui/src/app/components/install-wizard/dependencies/dependencies.component.html +++ /dev/null @@ -1,31 +0,0 @@ -
-
-
- - {{label}} - -
- -
- {{longMessage}} -
- -
- - -
- -
- -
{{dep.title}}
- {{dep.versionSpec}} -
- {{dep.violation}} - -
-
-
-
diff --git a/ui/src/app/components/install-wizard/dependencies/dependencies.component.module.ts b/ui/src/app/components/install-wizard/dependencies/dependencies.component.module.ts deleted file mode 100644 index d41c07e08..000000000 --- a/ui/src/app/components/install-wizard/dependencies/dependencies.component.module.ts +++ /dev/null @@ -1,22 +0,0 @@ -import { NgModule } from '@angular/core' -import { CommonModule } from '@angular/common' -import { DependenciesComponent } from './dependencies.component' -import { IonicModule } from '@ionic/angular' -import { RouterModule } from '@angular/router' -import { SharingModule } from 'src/app/modules/sharing.module' -import { StatusComponentModule } from '../../status/status.component.module' - -@NgModule({ - declarations: [ - DependenciesComponent, - ], - imports: [ - CommonModule, - IonicModule, - RouterModule.forChild([]), - SharingModule, - StatusComponentModule, - ], - exports: [DependenciesComponent], -}) -export class DependenciesComponentModule { } diff --git a/ui/src/app/components/install-wizard/dependencies/dependencies.component.ts b/ui/src/app/components/install-wizard/dependencies/dependencies.component.ts deleted file mode 100644 index ec9aa0815..000000000 --- a/ui/src/app/components/install-wizard/dependencies/dependencies.component.ts +++ /dev/null @@ -1,127 +0,0 @@ -import { Component, Input, OnInit } from '@angular/core' -import { PopoverController } from '@ionic/angular' -import { BehaviorSubject, Subject } from 'rxjs' -import { AppStatus } from 'src/app/models/app-model' -import { AppDependency, DependencyViolationSeverity, getViolationSeverity } from 'src/app/models/app-types' -import { displayEmver } from 'src/app/pipes/emver.pipe' -import { InformationPopoverComponent } from '../../information-popover/information-popover.component' -import { Loadable } from '../loadable' -import { WizardAction } from '../wizard-types' - -@Component({ - selector: 'dependencies', - templateUrl: './dependencies.component.html', - styleUrls: ['../install-wizard.component.scss'], -}) -export class DependenciesComponent implements OnInit, Loadable { - @Input() params: { - action: WizardAction, - title: string, - version: string, - serviceRequirements: AppDependency[] - } - - filteredServiceRequirements: AppDependency[] - - $loading$ = new BehaviorSubject(false) - $cancel$ = new Subject() - - longMessage: string - dependencyViolations: { - iconURL: string - title: string, - versionSpec: string, - violation: string, - color: string, - badgeStyle: string - }[] - label: string - $color$ = new BehaviorSubject('medium') - - constructor (private readonly popoverController: PopoverController) { } - - load () { - this.$color$.next(this.$color$.getValue()) - } - - ngOnInit () { - this.filteredServiceRequirements = this.params.serviceRequirements.filter(dep => { - return [DependencyViolationSeverity.REQUIRED, DependencyViolationSeverity.RECOMMENDED].includes(getViolationSeverity(dep)) - }) - .filter(dep => ['incompatible-version', 'missing'].includes(dep.violation.name)) - - this.dependencyViolations = this.filteredServiceRequirements - .map(dep => ({ - iconURL: dep.iconURL, - title: dep.title, - versionSpec: (dep.violation && dep.violation.name === 'incompatible-config' && 'reconfigure') || dep.versionSpec, - isInstalling: dep.violation && dep.violation.name === 'incompatible-status' && dep.violation.status === AppStatus.INSTALLING, - violation: renderViolation(dep), - color: 'medium', - badgeStyle: `background: radial-gradient(var(--ion-color-warning) 40%, transparent)`, - })) - - this.setSeverityAttributes() - } - - setSeverityAttributes () { - switch (getWorstViolationSeverity(this.filteredServiceRequirements)){ - case DependencyViolationSeverity.REQUIRED: - this.longMessage = `${this.params.title} requires the installation of other services. Don't worry, you'll be able to install these requirements later.` - this.label = 'Notice' - this.$color$.next('dark') - break - case DependencyViolationSeverity.RECOMMENDED: - this.longMessage = `${this.params.title} recommends the installation of other services. Don't worry, you'll be able to install these requirements later.` - this.label = 'Notice' - this.$color$.next('dark') - break - default: - this.longMessage = `All installation requirements for ${this.params.title} version ${displayEmver(this.params.version)} are met.` - this.$color$.next('success') - this.label = `Ready` - } - } - - async presentPopover (ev: any, information: string) { - const popover = await this.popoverController.create({ - component: InformationPopoverComponent, - event: ev, - translucent: false, - showBackdrop: true, - backdropDismiss: true, - componentProps: { - information, - }, - }) - return popover.present() - } -} - -function renderViolation1 (dep: AppDependency): string { - const severity = getViolationSeverity(dep) - switch (severity){ - case DependencyViolationSeverity.REQUIRED: return 'mandatory' - case DependencyViolationSeverity.RECOMMENDED: return 'recommended' - case DependencyViolationSeverity.OPTIONAL: return 'optional' - case DependencyViolationSeverity.NONE: return 'none' - } -} - -function renderViolation (dep: AppDependency): string { - const severity = renderViolation1(dep) - if (severity === 'none') return '' - - switch (dep.violation.name){ - case 'missing': return `${severity}` - case 'incompatible-version': return `${severity}` - case 'incompatible-config': return `` - case 'incompatible-status': return '' - default: return '' - } -} - -function getWorstViolationSeverity (rs: AppDependency[]) : DependencyViolationSeverity { - if (!rs) return DependencyViolationSeverity.NONE - return rs.map(getViolationSeverity).sort( (a, b) => b - a )[0] || DependencyViolationSeverity.NONE -} diff --git a/ui/src/app/components/install-wizard/dependents/dependents.component.html b/ui/src/app/components/install-wizard/dependents/dependents.component.html index 5d2f6e30f..0fcb73dc5 100644 --- a/ui/src/app/components/install-wizard/dependents/dependents.component.html +++ b/ui/src/app/components/install-wizard/dependents/dependents.component.html @@ -1,5 +1,5 @@
-
+
- +
{{dep.title}}
@@ -35,7 +35,7 @@
-
+
Checking for installed services which depend on {{params.title}}...
diff --git a/ui/src/app/components/install-wizard/dependents/dependents.component.ts b/ui/src/app/components/install-wizard/dependents/dependents.component.ts index cf549bf72..b58e1780c 100644 --- a/ui/src/app/components/install-wizard/dependents/dependents.component.ts +++ b/ui/src/app/components/install-wizard/dependents/dependents.component.ts @@ -1,9 +1,9 @@ import { Component, Input, OnInit } from '@angular/core' import { BehaviorSubject, from, Subject } from 'rxjs' import { takeUntil, tap } from 'rxjs/operators' -import { DependentBreakage } from 'src/app/models/app-types' +import { Breakages } from 'src/app/services/api/api-types' import { markAsLoadingDuring$ } from 'src/app/services/loader.service' -import { capitalizeFirstLetter } from 'src/app/util/misc.util' +import { capitalizeFirstLetter, isEmptyObject } from 'src/app/util/misc.util' import { Loadable } from '../loadable' import { WizardAction } from '../wizard-types' @@ -17,7 +17,7 @@ export class DependentsComponent implements OnInit, Loadable { title: string, action: WizardAction, //Are you sure you want to *uninstall*..., verb: string, // *Uninstalling* will cause problems... - fetchBreakages: () => Promise, + fetchBreakages: () => Promise, skipConfirmationDialogue?: boolean } @Input() transitions: { @@ -27,34 +27,33 @@ export class DependentsComponent implements OnInit, Loadable { error: (e: Error) => void } - - dependentBreakages: DependentBreakage[] + dependentBreakages: Breakages hasDependentViolation: boolean longMessage: string | null = null - $color$ = new BehaviorSubject('medium') // this will display disabled while loading - $loading$ = new BehaviorSubject(false) - $cancel$ = new Subject() + color$ = new BehaviorSubject('medium') // this will display disabled while loading + loading$ = new BehaviorSubject(false) + cancel$ = new Subject() constructor () { } ngOnInit () { } load () { - this.$color$.next('medium') - markAsLoadingDuring$(this.$loading$, from(this.params.fetchBreakages())).pipe( - takeUntil(this.$cancel$), - tap(breakages => this.dependentBreakages = breakages || []), + this.color$.next('medium') + markAsLoadingDuring$(this.loading$, from(this.params.fetchBreakages())).pipe( + takeUntil(this.cancel$), + tap(breakages => this.dependentBreakages = breakages), ).subscribe( { complete: () => { - this.hasDependentViolation = this.dependentBreakages && this.dependentBreakages.length > 0 + this.hasDependentViolation = this.dependentBreakages && !isEmptyObject(this.dependentBreakages) if (this.hasDependentViolation) { this.longMessage = `${capitalizeFirstLetter(this.params.verb)} ${this.params.title} will cause the following services to STOP running. Starting them again will require additional actions.` - this.$color$.next('warning') + this.color$.next('warning') } else if (this.params.skipConfirmationDialogue) { this.transitions.next() } else { this.longMessage = `No other services installed on your Embassy will be affected by this action.` - this.$color$.next('success') + this.color$.next('success') } }, error: (e: Error) => this.transitions.error(new Error(`Fetching dependent service information failed: ${e.message || e}`)), diff --git a/ui/src/app/components/install-wizard/install-wizard.component.html b/ui/src/app/components/install-wizard/install-wizard.component.html index 760d4270c..8ba597a4b 100644 --- a/ui/src/app/components/install-wizard/install-wizard.component.html +++ b/ui/src/app/components/install-wizard/install-wizard.component.html @@ -8,18 +8,18 @@ - + - + -
+
@@ -35,7 +35,7 @@ - + @@ -58,7 +58,7 @@ - + Dismiss diff --git a/ui/src/app/components/install-wizard/install-wizard.component.module.ts b/ui/src/app/components/install-wizard/install-wizard.component.module.ts index 06094fc82..38711e825 100644 --- a/ui/src/app/components/install-wizard/install-wizard.component.module.ts +++ b/ui/src/app/components/install-wizard/install-wizard.component.module.ts @@ -4,7 +4,6 @@ import { InstallWizardComponent } from './install-wizard.component' import { IonicModule } from '@ionic/angular' import { RouterModule } from '@angular/router' import { SharingModule } from 'src/app/modules/sharing.module' -import { DependenciesComponentModule } from './dependencies/dependencies.component.module' import { DependentsComponentModule } from './dependents/dependents.component.module' import { CompleteComponentModule } from './complete/complete.component.module' import { NotesComponentModule } from './notes/notes.component.module' @@ -18,7 +17,6 @@ import { NotesComponentModule } from './notes/notes.component.module' IonicModule, RouterModule.forChild([]), SharingModule, - DependenciesComponentModule, DependentsComponentModule, CompleteComponentModule, NotesComponentModule, diff --git a/ui/src/app/components/install-wizard/install-wizard.component.ts b/ui/src/app/components/install-wizard/install-wizard.component.ts index 64e3431a0..1d45d2e41 100644 --- a/ui/src/app/components/install-wizard/install-wizard.component.ts +++ b/ui/src/app/components/install-wizard/install-wizard.component.ts @@ -1,10 +1,8 @@ -import { Component, Input, NgZone, OnInit, QueryList, ViewChild, ViewChildren } from '@angular/core' +import { Component, Input, NgZone, QueryList, ViewChild, ViewChildren } from '@angular/core' import { IonContent, IonSlides, ModalController } from '@ionic/angular' import { BehaviorSubject } from 'rxjs' -import { Cleanup } from 'src/app/util/cleanup' import { capitalizeFirstLetter, pauseFor } from 'src/app/util/misc.util' import { CompleteComponent } from './complete/complete.component' -import { DependenciesComponent } from './dependencies/dependencies.component' import { DependentsComponent } from './dependents/dependents.component' import { NotesComponent } from './notes/notes.component' import { Loadable } from './loadable' @@ -15,7 +13,7 @@ import { WizardAction } from './wizard-types' templateUrl: './install-wizard.component.html', styleUrls: ['./install-wizard.component.scss'], }) -export class InstallWizardComponent extends Cleanup implements OnInit { +export class InstallWizardComponent { @Input() params: { // defines each slide along with bottom bar slideDefinitions: SlideDefinition[] @@ -40,11 +38,13 @@ export class InstallWizardComponent extends Cleanup implements OnInit { return this.params.slideDefinitions[this.slideIndex].bottomBar } - $initializing$ = new BehaviorSubject(true) - $error$ = new BehaviorSubject(undefined) + initializing$ = new BehaviorSubject(true) + error$ = new BehaviorSubject(undefined) - constructor (private readonly modalController: ModalController, private readonly zone: NgZone) { super() } - ngOnInit () { } + constructor ( + private readonly modalController: ModalController, + private readonly zone: NgZone, + ) { } ngAfterViewInit () { this.currentSlide.load() @@ -53,15 +53,15 @@ export class InstallWizardComponent extends Cleanup implements OnInit { } ionViewDidEnter () { - this.$initializing$.next(false) + this.initializing$.next(false) } // process bottom bar buttons private transition = (info: { next: any } | { error: Error } | { cancelled: true } | { final: true }) => { const i = info as { next?: any, error?: Error, cancelled?: true, final?: true } - if (i.cancelled) this.currentSlide.$cancel$.next() + if (i.cancelled) this.currentSlide.cancel$.next() if (i.final || i.cancelled) return this.modalController.dismiss(i) - if (i.error) return this.$error$.next(capitalizeFirstLetter(i.error.message)) + if (i.error) return this.error$.next(capitalizeFirstLetter(i.error.message)) this.moveToNextSlide(i.next) } @@ -90,7 +90,6 @@ export class InstallWizardComponent extends Cleanup implements OnInit { export interface SlideDefinition { slide: - { selector: 'dependencies', params: DependenciesComponent['params'] } | { selector: 'dependents', params: DependentsComponent['params'] } | { selector: 'complete', params: CompleteComponent['params'] } | { selector: 'notes', params: NotesComponent['params'] } diff --git a/ui/src/app/components/install-wizard/loadable.ts b/ui/src/app/components/install-wizard/loadable.ts index e4ecbfd77..3e555bad1 100644 --- a/ui/src/app/components/install-wizard/loadable.ts +++ b/ui/src/app/components/install-wizard/loadable.ts @@ -3,7 +3,7 @@ import { BehaviorSubject, Subject } from 'rxjs' export interface Loadable { load: (prevResult?: any) => void result?: any // fill this variable on slide 1 to get passed into the load on slide 2. If this variable is falsey, it will skip the next slide. - $loading$: BehaviorSubject // will be true during load function - $cancel$: Subject // will cancel load function + loading$: BehaviorSubject // will be true during load function + cancel$: Subject // will cancel load function } diff --git a/ui/src/app/components/install-wizard/notes/notes.component.ts b/ui/src/app/components/install-wizard/notes/notes.component.ts index 5fca514cd..44dcda9ac 100644 --- a/ui/src/app/components/install-wizard/notes/notes.component.ts +++ b/ui/src/app/components/install-wizard/notes/notes.component.ts @@ -14,8 +14,8 @@ export class NotesComponent implements OnInit, Loadable { titleColor: string } - $loading$ = new BehaviorSubject(false) - $cancel$ = new Subject() + loading$ = new BehaviorSubject(false) + cancel$ = new Subject() load () { } diff --git a/ui/src/app/components/install-wizard/prebaked-wizards.ts b/ui/src/app/components/install-wizard/prebaked-wizards.ts index 4d9b45098..ca63b0ff9 100644 --- a/ui/src/app/components/install-wizard/prebaked-wizards.ts +++ b/ui/src/app/components/install-wizard/prebaked-wizards.ts @@ -1,8 +1,7 @@ import { Injectable } from '@angular/core' -import { AppModel, AppStatus } from 'src/app/models/app-model' -import { OsUpdateService } from 'src/app/services/os-update.service' +import { InstalledPackageDataEntry } from 'src/app/models/patch-db/data-model' +import { Breakages } from 'src/app/services/api/api-types' import { exists } from 'src/app/util/misc.util' -import { AppDependency, DependentBreakage, AppInstalledPreview } from '../../models/app-types' import { ApiService } from '../../services/api/api.service' import { InstallWizardComponent, SlideDefinition, TopbarParams } from './install-wizard.component' import { WizardAction } from './wizard-types' @@ -11,43 +10,34 @@ import { WizardAction } from './wizard-types' export class WizardBaker { constructor ( private readonly apiService: ApiService, - private readonly updateService: OsUpdateService, - private readonly appModel: AppModel, ) { } install (values: { - id: string, title: string, version: string, serviceRequirements: AppDependency[], installAlert?: string + id: string, title: string, version: string, installAlert?: string }): InstallWizardComponent['params'] { - const { id, title, version, serviceRequirements, installAlert } = values + const { id, title, version, installAlert } = values validate(id, exists, 'missing id') validate(title, exists, 'missing title') validate(version, exists, 'missing version') - validate(serviceRequirements, t => !!t && Array.isArray(t), 'missing serviceRequirements') const action = 'install' - const toolbar: TopbarParams = { action, title, version } + const toolbar: TopbarParams = { action, title, version } const slideDefinitions: SlideDefinition[] = [ installAlert ? { slide: { selector: 'notes', - params: { notes: installAlert, title: 'Warning', titleColor: 'warning' }, + params: { + notes: installAlert, + title: 'Warning', + titleColor: 'warning', + }, }, bottomBar: { cancel: { afterLoading: { text: 'Cancel' } }, next: 'Next', }, } : undefined, - { - slide: { - selector: 'dependencies', - params: { action, title, version, serviceRequirements }, - }, - bottomBar: { - cancel: { afterLoading: { text: 'Cancel' } }, - next: 'Install', - }, - }, { slide: { selector: 'complete', @@ -55,7 +45,7 @@ export class WizardBaker { action, verb: 'beginning installation for', title, - executeAction: () => this.apiService.installApp(id, version).then(app => { this.appModel.add({ ...app, status: AppStatus.INSTALLING })}), + executeAction: () => this.apiService.installPackage({ id, version }), }, }, bottomBar: { @@ -68,14 +58,13 @@ export class WizardBaker { } update (values: { - id: string, title: string, version: string, serviceRequirements: AppDependency[], installAlert?: string + id: string, title: string, version: string, installAlert?: string }): InstallWizardComponent['params'] { - const { id, title, version, serviceRequirements, installAlert } = values + const { id, title, version, installAlert } = values validate(id, exists, 'missing id') validate(title, exists, 'missing title') validate(version, exists, 'missing version') - validate(serviceRequirements, t => !!t && Array.isArray(t), 'missing serviceRequirements') const action = 'update' const toolbar: TopbarParams = { action, title, version } @@ -84,26 +73,26 @@ export class WizardBaker { installAlert ? { slide: { selector: 'notes', - params: { notes: installAlert, title: 'Warning', titleColor: 'warning'}, + params: { + notes: installAlert, + title: 'Warning', + titleColor: 'warning', + }, }, bottomBar: { cancel: { afterLoading: { text: 'Cancel' } }, next: 'Next', }, } : undefined, - { slide: { - selector: 'dependencies', - params: { action, title, version, serviceRequirements }, - }, - bottomBar: { - cancel: { afterLoading: { text: 'Cancel' } }, - next: 'Update', - }, - }, - { slide: { + { + slide: { selector: 'dependents', params: { - skipConfirmationDialogue: true, action, verb: 'updating', title, fetchBreakages: () => this.apiService.installApp(id, version, true).then( ({ breakages }) => breakages ), + skipConfirmationDialogue: true, + action, + verb: 'updating', + title, + fetchBreakages: () => this.apiService.dryUpdatePackage({ id, version }).then( ({ breakages }) => breakages ), }, }, bottomBar: { @@ -111,12 +100,14 @@ export class WizardBaker { next: 'Update Anyways', }, }, - { slide: { + { + slide: { selector: 'complete', params: { - action, verb: 'beginning update for', title, executeAction: () => this.apiService.installApp(id, version).then(app => { - this.appModel.update({ id: app.id, status: AppStatus.INSTALLING }) - }), + action, + verb: 'beginning update for', + title, + executeAction: () => this.apiService.installPackage({ id, version }), }, }, bottomBar: { @@ -138,18 +129,27 @@ export class WizardBaker { const toolbar: TopbarParams = { action, title, version } const slideDefinitions: SlideDefinition[] = [ - { slide : { + { + slide : { selector: 'notes', - params: { notes: releaseNotes, title: 'Release Notes', titleColor: 'dark' }, + params: { + notes: releaseNotes, + title: 'Release Notes', + titleColor: 'dark', + }, }, bottomBar: { cancel: { afterLoading: { text: 'Cancel' } }, next: 'Update OS', }, }, - { slide: { + { + slide: { selector: 'complete', params: { - action, verb: 'beginning update for', title, executeAction: () => this.updateService.updateEmbassyOS(version), + action, + verb: 'beginning update for', + title, + executeAction: () => this.apiService.updateServer({ }), }, }, bottomBar: { @@ -162,14 +162,13 @@ export class WizardBaker { } downgrade (values: { - id: string, title: string, version: string, serviceRequirements: AppDependency[], installAlert?: string + id: string, title: string, version: string, installAlert?: string }): InstallWizardComponent['params'] { - const { id, title, version, serviceRequirements, installAlert } = values + const { id, title, version, installAlert } = values validate(id, exists, 'missing id') validate(title, exists, 'missing title') validate(version, exists, 'missing version') - validate(serviceRequirements, t => !!t && Array.isArray(t), 'missing serviceRequirements') const action = 'downgrade' const toolbar: TopbarParams = { action, title, version } @@ -178,23 +177,22 @@ export class WizardBaker { installAlert ? { slide: { selector: 'notes', - params: { notes: installAlert, title: 'Warning', titleColor: 'warning' }, + params: { + notes: installAlert, + title: 'Warning', + titleColor: 'warning', + }, }, bottomBar: { cancel: { afterLoading: { text: 'Cancel' } }, next: 'Next' }, } : undefined, - { slide: { - selector: 'dependencies', - params: { action, title, version, serviceRequirements }, - }, - bottomBar: { - cancel: { afterLoading: { text: 'Cancel' } }, - next: 'Downgrade', - }, - }, { slide: { selector: 'dependents', params: { - skipConfirmationDialogue: true, action, verb: 'downgrading', title, fetchBreakages: () => this.apiService.installApp(id, version, true).then( ({ breakages }) => breakages ), + skipConfirmationDialogue: true, + action, + verb: 'downgrading', + title, + fetchBreakages: () => this.apiService.dryUpdatePackage({ id, version }).then( ({ breakages }) => breakages ), }, }, bottomBar: { @@ -204,9 +202,10 @@ export class WizardBaker { { slide: { selector: 'complete', params: { - action, verb: 'beginning downgrade for', title, executeAction: () => this.apiService.installApp(id, version).then(app => { - this.appModel.update({ id: app.id, status: AppStatus.INSTALLING }) - }), + action, + verb: 'beginning downgrade for', + title, + executeAction: () => this.apiService.installPackage({ id, version }), }, }, bottomBar: { @@ -231,7 +230,8 @@ export class WizardBaker { const toolbar: TopbarParams = { action, title, version } const slideDefinitions: SlideDefinition[] = [ - { slide: { + { + slide: { selector: 'notes', params: { notes: uninstallAlert || defaultUninstallationWarning(title), @@ -241,18 +241,26 @@ export class WizardBaker { }, bottomBar: { cancel: { afterLoading: { text: 'Cancel' } }, next: 'Continue' }, }, - { slide: { + { + slide: { selector: 'dependents', params: { - action, verb: 'uninstalling', title, fetchBreakages: () => this.apiService.uninstallApp(id, true).then( ({ breakages }) => breakages ), + action, + verb: 'uninstalling', + title, + fetchBreakages: () => this.apiService.dryRemovePackage({ id }).then( ({ breakages }) => breakages ), }, }, bottomBar: { cancel: { whileLoading: { }, afterLoading: { text: 'Cancel' } }, next: 'Uninstall' }, }, - { slide: { + { + slide: { selector: 'complete', params: { - action, verb: 'uninstalling', title, executeAction: () => this.apiService.uninstallApp(id).then(() => this.appModel.delete(id)), + action, + verb: 'uninstalling', + title, + executeAction: () => this.apiService.removePackage({ id }), }, }, bottomBar: { finish: 'Dismiss', cancel: { whileLoading: { } } }, @@ -262,7 +270,7 @@ export class WizardBaker { } stop (values: { - breakages: DependentBreakage[], id: string, title: string, version: string + breakages: Breakages, id: string, title: string, version: string }): InstallWizardComponent['params'] { const { breakages, title, version } = values @@ -274,10 +282,14 @@ export class WizardBaker { const toolbar: TopbarParams = { action, title, version } const slideDefinitions: SlideDefinition[] = [ - { slide: { + { + slide: { selector: 'dependents', params: { - action, verb: 'stopping', title, fetchBreakages: () => Promise.resolve(breakages), + action, + verb: 'stopping', + title, + fetchBreakages: () => Promise.resolve(breakages), }, }, bottomBar: { cancel: { afterLoading: { text: 'Cancel' } }, next: 'Stop Anyways' }, @@ -286,19 +298,20 @@ export class WizardBaker { return { toolbar, slideDefinitions } } - configure (values: { - breakages: DependentBreakage[], app: AppInstalledPreview - }): InstallWizardComponent['params'] { - const { breakages, app } = values - const { title, versionInstalled: version } = app + configure (values: { breakages: Breakages, pkg: InstalledPackageDataEntry }): InstallWizardComponent['params'] { + const { breakages, pkg } = values + const { title, version } = pkg.manifest const action = 'configure' const toolbar: TopbarParams = { action, title, version } const slideDefinitions: SlideDefinition[] = [ - { slide: { + { + slide: { selector: 'dependents', params: { - action, verb: 'saving config for', title, fetchBreakages: () => Promise.resolve(breakages), + action, + verb: 'saving config for', + title, fetchBreakages: () => Promise.resolve(breakages), }, }, bottomBar: { cancel: { afterLoading: { text: 'Cancel' } }, next: 'Save Config Anyways' }, diff --git a/ui/src/app/components/object-config/object-config.component.ts b/ui/src/app/components/object-config/object-config.component.ts index 6f4f9f482..cbef09341 100644 --- a/ui/src/app/components/object-config/object-config.component.ts +++ b/ui/src/app/components/object-config/object-config.component.ts @@ -1,9 +1,9 @@ import { Component, EventEmitter, Input, Output } from '@angular/core' -import { Annotation, Annotations } from '../../app-config/config-utilities' +import { Annotation, Annotations } from '../../pkg-config/config-utilities' import { TrackingModalController } from 'src/app/services/tracking-modal-controller.service' -import { ConfigCursor } from 'src/app/app-config/config-cursor' -import { ModalPresentable } from 'src/app/app-config/modal-presentable' -import { ValueSpecOf, ValueSpec } from 'src/app/app-config/config-types' +import { ConfigCursor } from 'src/app/pkg-config/config-cursor' +import { ModalPresentable } from 'src/app/pkg-config/modal-presentable' +import { ValueSpecOf, ValueSpec } from 'src/app/pkg-config/config-types' import { MaskPipe } from 'src/app/pipes/mask.pipe' @Component({ diff --git a/ui/src/app/components/pwa-back-button/pwa-back.component.ts b/ui/src/app/components/pwa-back-button/pwa-back.component.ts index cc8bb0379..8d3a3c4da 100644 --- a/ui/src/app/components/pwa-back-button/pwa-back.component.ts +++ b/ui/src/app/components/pwa-back-button/pwa-back.component.ts @@ -1,5 +1,6 @@ import { Component } from '@angular/core' -import { PwaBackService } from 'src/app/services/pwa-back.service' +import { NavController } from '@ionic/angular' + @Component({ selector: 'pwa-back-button', templateUrl: './pwa-back.component.html', @@ -7,10 +8,10 @@ import { PwaBackService } from 'src/app/services/pwa-back.service' }) export class PwaBackComponent { constructor ( - private readonly pwaBack: PwaBackService, + private readonly nav: NavController, ) { } navigateBack () { - return this.pwaBack.back() + return this.nav.back() } } diff --git a/ui/src/app/components/recommendation-button/recommendation-button.component.html b/ui/src/app/components/recommendation-button/recommendation-button.component.html index 785c811b2..67de111c5 100644 --- a/ui/src/app/components/recommendation-button/recommendation-button.component.html +++ b/ui/src/app/components/recommendation-button/recommendation-button.component.html @@ -4,6 +4,6 @@ border-color: #FFEB3B; border-width: medium; box-shadow: 0 0 10px white;" size="small" (click)="presentPopover($event)"> - + diff --git a/ui/src/app/components/recommendation-button/recommendation-button.component.ts b/ui/src/app/components/recommendation-button/recommendation-button.component.ts index 32d9bf03b..80c2461fb 100644 --- a/ui/src/app/components/recommendation-button/recommendation-button.component.ts +++ b/ui/src/app/components/recommendation-button/recommendation-button.component.ts @@ -1,8 +1,7 @@ -import { Component, Input, OnInit } from '@angular/core' +import { Component, Input } from '@angular/core' import { Router } from '@angular/router' import { PopoverController } from '@ionic/angular' import { filter, take } from 'rxjs/operators' -import { Cleanup } from 'src/app/util/cleanup' import { capitalizeFirstLetter } from 'src/app/util/misc.util' import { InformationPopoverComponent } from '../information-popover/information-popover.component' @@ -11,12 +10,13 @@ import { InformationPopoverComponent } from '../information-popover/information- templateUrl: './recommendation-button.component.html', styleUrls: ['./recommendation-button.component.scss'], }) -export class RecommendationButtonComponent extends Cleanup implements OnInit { +export class RecommendationButtonComponent { @Input() rec: Recommendation @Input() raise?: { id: string } - constructor (private readonly router: Router, private readonly popoverController: PopoverController) { - super() - } + constructor ( + private readonly router: Router, + private readonly popoverController: PopoverController, + ) { } ngOnInit () { if (!this.raise) return @@ -41,7 +41,7 @@ export class RecommendationButtonComponent extends Cleanup implements OnInit { componentProps: { information: `
- ${capitalizeFirstLetter(this.rec.title)} Installation Recommendations + ${capitalizeFirstLetter(this.rec.dependentTitle)} Installation Recommendations
${this.rec.description} @@ -57,10 +57,9 @@ export class RecommendationButtonComponent extends Cleanup implements OnInit { } export type Recommendation = { - title: string - appId: string - iconURL: string, - description: string, - versionSpec?: string - whyDependency?: string + dependentId: string + dependentTitle: string + dependentIcon: string, + description: string + version?: string } diff --git a/ui/src/app/components/status/status.component.html b/ui/src/app/components/status/status.component.html index 9509a9ae5..19737a908 100644 --- a/ui/src/app/components/status/status.component.html +++ b/ui/src/app/components/status/status.component.html @@ -1,24 +1,24 @@

- {{ display }} + {{ display }}

-

- {{ display }} +

+ {{ display }} -

+

- {{ display }} + {{ display }}

- {{ display }} + {{ display }}

-

- {{ display }} +

+ {{ display }}

diff --git a/ui/src/app/components/status/status.component.scss b/ui/src/app/components/status/status.component.scss index 9c61e745d..7a81c76eb 100644 --- a/ui/src/app/components/status/status.component.scss +++ b/ui/src/app/components/status/status.component.scss @@ -15,18 +15,3 @@ height: 24px; padding-left: 12px; } - -.dots { - vertical-align: middle; - margin-left: 8px; -} - -.dots-small { - width: 12px !important; - height: 12px !important; -} - -.dots-medium { - width: 16px !important; - height: 16px !important; -} \ No newline at end of file diff --git a/ui/src/app/components/status/status.component.ts b/ui/src/app/components/status/status.component.ts index d6cb837b6..a9dff2c97 100644 --- a/ui/src/app/components/status/status.component.ts +++ b/ui/src/app/components/status/status.component.ts @@ -1,7 +1,7 @@ import { Component, Input } from '@angular/core' -import { AppStatus } from 'src/app/models/app-model' -import { ServerStatus } from 'src/app/models/server-model' -import { ServerStatusRendering, AppStatusRendering } from '../../util/status-rendering' +import { PackageDataEntry } from 'src/app/models/patch-db/data-model' +import { ConnectionState } from 'src/app/services/connection.service' +import { renderPkgStatus } from 'src/app/services/pkg-status-rendering.service' @Component({ selector: 'status', @@ -9,48 +9,18 @@ import { ServerStatusRendering, AppStatusRendering } from '../../util/status-ren styleUrls: ['./status.component.scss'], }) export class StatusComponent { - @Input() appStatus?: AppStatus - @Input() serverStatus?: ServerStatus + @Input() pkg: PackageDataEntry + @Input() connection: ConnectionState @Input() size: 'small' | 'medium' | 'large' | 'italics-small' | 'bold-large' = 'large' - @Input() text: string = '' - color: string - display: string - showDots: boolean - style = '' + display = '' + color = '' + showDots = false ngOnChanges () { - if (this.serverStatus) { - this.handleServerStatus() - } else if (this.appStatus) { - this.handleAppStatus() - } - } - - handleServerStatus () { - let res = ServerStatusRendering[this.serverStatus] - if (!res) { - console.warn(`Received invalid server status from the server: `, this.serverStatus) - res = ServerStatusRendering[ServerStatus.UNKNOWN] - } - - const { display, color, showDots } = res + const { display, color, showDots } = renderPkgStatus(this.pkg, this.connection) this.display = display this.color = color this.showDots = showDots } - - handleAppStatus () { - let res = AppStatusRendering[this.appStatus] - if (!res) { - console.warn(`Received invalid app status from the server: `, this.appStatus) - res = AppStatusRendering[AppStatus.UNKNOWN] - } - - const { display, color, showDots, style } = res - this.display = display + this.text - this.color = color - this.showDots = showDots - this.style = style - } } diff --git a/ui/src/app/components/update-os-banner/update-os-banner.component.html b/ui/src/app/components/update-os-banner/update-os-banner.component.html deleted file mode 100644 index f94816b6d..000000000 --- a/ui/src/app/components/update-os-banner/update-os-banner.component.html +++ /dev/null @@ -1,5 +0,0 @@ - - - New EmbassyOS Version {{res.versionLatest | displayEmver}} Available! - - diff --git a/ui/src/app/components/update-os-banner/update-os-banner.component.module.ts b/ui/src/app/components/update-os-banner/update-os-banner.component.module.ts deleted file mode 100644 index 2b058360d..000000000 --- a/ui/src/app/components/update-os-banner/update-os-banner.component.module.ts +++ /dev/null @@ -1,18 +0,0 @@ -import { NgModule } from '@angular/core' -import { CommonModule } from '@angular/common' -import { UpdateOsBannerComponent } from './update-os-banner.component' -import { IonicModule } from '@ionic/angular' -import { SharingModule } from 'src/app/modules/sharing.module' - -@NgModule({ - declarations: [ - UpdateOsBannerComponent, - ], - imports: [ - CommonModule, - IonicModule, - SharingModule, - ], - exports: [UpdateOsBannerComponent], -}) -export class UpdateOsBannerComponentModule { } diff --git a/ui/src/app/components/update-os-banner/update-os-banner.component.scss b/ui/src/app/components/update-os-banner/update-os-banner.component.scss deleted file mode 100644 index 5b6b18d63..000000000 --- a/ui/src/app/components/update-os-banner/update-os-banner.component.scss +++ /dev/null @@ -1,11 +0,0 @@ -ion-item { - - --background: linear-gradient(90deg, var(--ion-color-light), var(--ion-color-primary)); - --min-height: 0px; - ion-label { - font-family: 'Open Sans'; - font-size: small; - text-align: center; - font-weight: bold; - } -} diff --git a/ui/src/app/components/update-os-banner/update-os-banner.component.ts b/ui/src/app/components/update-os-banner/update-os-banner.component.ts deleted file mode 100644 index 36ae531aa..000000000 --- a/ui/src/app/components/update-os-banner/update-os-banner.component.ts +++ /dev/null @@ -1,35 +0,0 @@ -import { Component } from '@angular/core' -import { OsUpdateService } from 'src/app/services/os-update.service' -import { Observable } from 'rxjs' -import { ModalController } from '@ionic/angular' -import { WizardBaker } from '../install-wizard/prebaked-wizards' -import { wizardModal } from '../install-wizard/install-wizard.component' -import { ReqRes } from 'src/app/services/api/api.service' - -@Component({ - selector: 'update-os-banner', - templateUrl: './update-os-banner.component.html', - styleUrls: ['./update-os-banner.component.scss'], -}) -export class UpdateOsBannerComponent { - updateAvailable$: Observable - constructor ( - private readonly osUpdateService: OsUpdateService, - private readonly modalCtrl: ModalController, - private readonly wizardBaker: WizardBaker, - ) { - this.updateAvailable$ = this.osUpdateService.watchForUpdateAvailable$() - } - - ngOnInit () { } - - async confirmUpdate (res: ReqRes.GetVersionLatestRes) { - await wizardModal( - this.modalCtrl, - this.wizardBaker.updateOS({ - version: res.versionLatest, - releaseNotes: res.releaseNotes, - }), - ) - } -} diff --git a/ui/src/app/guards/auth.guard.ts b/ui/src/app/guards/auth.guard.ts index 98fd1a6b5..c12ad3571 100644 --- a/ui/src/app/guards/auth.guard.ts +++ b/ui/src/app/guards/auth.guard.ts @@ -1,36 +1,41 @@ import { Injectable } from '@angular/core' import { CanActivate, Router, CanActivateChild } from '@angular/router' +import { tap } from 'rxjs/operators' import { AuthState, AuthService } from '../services/auth.service' @Injectable({ providedIn: 'root', }) export class AuthGuard implements CanActivate, CanActivateChild { + authState: AuthState + constructor ( private readonly authService: AuthService, private readonly router: Router, - ) { } + ) { + this.authService.watch$() + .pipe( + tap(auth => this.authState = auth), + ).subscribe() + } canActivate (): boolean { - return this.runCheck() + return this.runAuthCheck() } canActivateChild (): boolean { - return this.runCheck() + return this.runAuthCheck() } - private runCheck (): boolean { - const state = this.authService.peek() - - switch (state){ - case AuthState.VERIFIED: return true - case AuthState.UNVERIFIED: return this.toAuthenticate() - case AuthState.INITIALIZING: return this.toAuthenticate() + private runAuthCheck (): boolean { + switch (this.authState){ + case AuthState.VERIFIED: + return true + case AuthState.UNVERIFIED: + // @TODO could initializing cause a loop? + case AuthState.INITIALIZING: + this.router.navigate(['/auth'], { replaceUrl: true }) + return false } } - - private toAuthenticate () { - this.router.navigate(['/authenticate'], { replaceUrl: true }) - return false - } } diff --git a/ui/src/app/guards/deactivate.guard.ts b/ui/src/app/guards/deactivate.guard.ts deleted file mode 100644 index 43beacecc..000000000 --- a/ui/src/app/guards/deactivate.guard.ts +++ /dev/null @@ -1,26 +0,0 @@ -import { Injectable, Directive } from '@angular/core' -import { CanDeactivate } from '@angular/router' -import { HostListener } from '@angular/core' - -@Directive() -export abstract class PageCanDeactivate { - abstract canDeactivate (): boolean - - @HostListener('window:beforeunload', ['$event']) - unloadNotification (e: any) { - console.log(e) - if (!this.canDeactivate()) { - e.returnValue = true - } - } -} - -@Injectable({ - providedIn: 'root', -}) -export class CanDeactivateGuard implements CanDeactivate { - - canDeactivate (page: PageCanDeactivate): boolean { - return page.canDeactivate() || confirm('You have unsaved changes. Are you sure you want to leave the page?') - } -} \ No newline at end of file diff --git a/ui/src/app/guards/maintenance.guard.ts b/ui/src/app/guards/maintenance.guard.ts new file mode 100644 index 000000000..ce000ab25 --- /dev/null +++ b/ui/src/app/guards/maintenance.guard.ts @@ -0,0 +1,39 @@ +import { Injectable } from '@angular/core' +import { CanActivate, Router, CanActivateChild } from '@angular/router' +import { tap } from 'rxjs/operators' +import { ServerStatus } from '../models/patch-db/data-model' +import { PatchDbModel } from '../models/patch-db/patch-db-model' + +@Injectable({ + providedIn: 'root', +}) +export class MaintenanceGuard implements CanActivate, CanActivateChild { + serverStatus: ServerStatus + + constructor ( + private readonly router: Router, + private readonly patch: PatchDbModel, + ) { + this.patch.watch$('server-info', 'status') + .pipe( + tap(status => this.serverStatus = status), + ).subscribe() + } + + canActivate (): boolean { + return this.runServerStatusCheck() + } + + canActivateChild (): boolean { + return this.runServerStatusCheck() + } + + private runServerStatusCheck (): boolean { + if ([ServerStatus.Updating, ServerStatus.BackingUp].includes(this.serverStatus)) { + this.router.navigate(['/maintenance'], { replaceUrl: true }) + return false + } else { + return true + } + } +} \ No newline at end of file diff --git a/ui/src/app/guards/unauth.guard.ts b/ui/src/app/guards/unauth.guard.ts index e3312cbbb..d627c3354 100644 --- a/ui/src/app/guards/unauth.guard.ts +++ b/ui/src/app/guards/unauth.guard.ts @@ -1,25 +1,34 @@ import { Injectable } from '@angular/core' import { CanActivate, Router } from '@angular/router' +import { tap } from 'rxjs/operators' import { AuthService, AuthState } from '../services/auth.service' @Injectable({ providedIn: 'root', }) export class UnauthGuard implements CanActivate { + authState: AuthState + constructor ( private readonly authService: AuthService, private readonly router: Router, - ) { } + ) { + this.authService.watch$() + .pipe( + tap(auth => this.authState = auth), + ).subscribe() + } canActivate (): boolean { - const state = this.authService.peek() - switch (state){ + + switch (this.authState){ case AuthState.VERIFIED: { this.router.navigateByUrl('') return false } - case AuthState.UNVERIFIED: return true - case AuthState.INITIALIZING: return true + case AuthState.UNVERIFIED: + case AuthState.INITIALIZING: + return true } } } diff --git a/ui/src/app/guards/unmaintenance.guard.ts b/ui/src/app/guards/unmaintenance.guard.ts new file mode 100644 index 000000000..58958197e --- /dev/null +++ b/ui/src/app/guards/unmaintenance.guard.ts @@ -0,0 +1,31 @@ +import { Injectable } from '@angular/core' +import { CanActivate, Router } from '@angular/router' +import { tap } from 'rxjs/operators' +import { ServerStatus } from '../models/patch-db/data-model' +import { PatchDbModel } from '../models/patch-db/patch-db-model' + +@Injectable({ + providedIn: 'root', +}) +export class UnmaintenanceGuard implements CanActivate { + serverStatus: ServerStatus + + constructor ( + private readonly router: Router, + private readonly patch: PatchDbModel, + ) { + this.patch.watch$('server-info', 'status') + .pipe( + tap(status => this.serverStatus = status), + ).subscribe() + } + + canActivate (): boolean { + if (![ServerStatus.Updating, ServerStatus.BackingUp].includes(this.serverStatus)) { + this.router.navigate([''], { replaceUrl: true }) + return false + } else { + return true + } + } +} \ No newline at end of file diff --git a/ui/src/app/modals/app-backup/app-backup.module.ts b/ui/src/app/modals/app-backup/app-backup.module.ts deleted file mode 100644 index 5e7a76a53..000000000 --- a/ui/src/app/modals/app-backup/app-backup.module.ts +++ /dev/null @@ -1,17 +0,0 @@ -import { NgModule } from '@angular/core' -import { CommonModule } from '@angular/common' -import { IonicModule } from '@ionic/angular' -import { AppBackupPage } from './app-backup.page' -import { AppBackupConfirmationComponentModule } from 'src/app/components/app-backup-confirmation/app-backup-confirmation.component.module' - -@NgModule({ - declarations: [AppBackupPage], - imports: [ - CommonModule, - IonicModule, - AppBackupConfirmationComponentModule, - ], - entryComponents: [AppBackupPage], - exports: [AppBackupPage], -}) -export class AppBackupPageModule { } \ No newline at end of file diff --git a/ui/src/app/modals/app-backup/app-backup.page.html b/ui/src/app/modals/app-backup/app-backup.page.html deleted file mode 100644 index d89834132..000000000 --- a/ui/src/app/modals/app-backup/app-backup.page.html +++ /dev/null @@ -1,61 +0,0 @@ - - - - - - - - {{ type === 'create' ? 'Create Backup' : 'Restore Backup' }} - - - - - - - - - - - - - - - - {{ error }} - - - - - - - -

- - Warning -

-

{{restore}}

-
-
- - - No partitions available. To begin a backup, insert a storage device into your Embassy. - No partitions available. Insert the storage device containing the backup you wish to restore. - - - - {{ d.logicalname }} ({{ d.size }}) - - - - -

{{ p.label || p.logicalname }}

-

{{ p.size || 'unknown size' }}

-

Available

-

Unvailable

-
-
-
-
-
- -
diff --git a/ui/src/app/modals/app-backup/app-backup.page.scss b/ui/src/app/modals/app-backup/app-backup.page.scss deleted file mode 100644 index 7b51120cb..000000000 --- a/ui/src/app/modals/app-backup/app-backup.page.scss +++ /dev/null @@ -1,3 +0,0 @@ -.toast-close-button { - color: var(--ion-color-primary) !important; -} diff --git a/ui/src/app/modals/app-backup/app-backup.page.ts b/ui/src/app/modals/app-backup/app-backup.page.ts deleted file mode 100644 index 1742edc3d..000000000 --- a/ui/src/app/modals/app-backup/app-backup.page.ts +++ /dev/null @@ -1,225 +0,0 @@ -import { Component, Input } from '@angular/core' -import { ModalController, AlertController, LoadingController, ToastController } from '@ionic/angular' -import { AppModel, AppStatus } from 'src/app/models/app-model' -import { AppInstalledFull } from 'src/app/models/app-types' -import { ApiService } from 'src/app/services/api/api.service' -import { DiskInfo, DiskPartition } from 'src/app/models/server-model' -import { pauseFor } from 'src/app/util/misc.util' -import { concatMap } from 'rxjs/operators' -import { AppBackupConfirmationComponent } from 'src/app/components/app-backup-confirmation/app-backup-confirmation.component' - -@Component({ - selector: 'app-backup', - templateUrl: './app-backup.page.html', - styleUrls: ['./app-backup.page.scss'], -}) -export class AppBackupPage { - @Input() app: AppInstalledFull - @Input() type: 'create' | 'restore' - disks: DiskInfo[] - loading = true - error: string - allPartitionsMounted: boolean - defaultRestoreAlert: string - - constructor ( - private readonly modalCtrl: ModalController, - private readonly alertCtrl: AlertController, - private readonly loadingCtrl: LoadingController, - private readonly apiService: ApiService, - private readonly appModel: AppModel, - private readonly toastCtrl: ToastController, - ) { } - - ngOnInit () { - this.defaultRestoreAlert = `Restoring ${this.app.title} will overwrite its current data.` - return this.getExternalDisks().then(() => this.loading = false) - } - - async getExternalDisks (): Promise { - try { - this.disks = await this.apiService.getExternalDisks() - this.allPartitionsMounted = this.disks.every(d => d.partitions.every(p => p.isMounted)) - } catch (e) { - console.error(e) - this.error = e.message - } - } - - async doRefresh (event: any) { - await Promise.all([ - this.getExternalDisks(), - pauseFor(600), - ]) - event.target.complete() - } - - async dismiss () { - await this.modalCtrl.dismiss() - } - - async presentAlertHelp (): Promise { - let alert: HTMLIonAlertElement - if (this.type === 'create') { - alert = await this.alertCtrl.create({ - backdropDismiss: false, - header: `Backups`, - message: `Select a location to back up ${this.app.title}.

Internal drives and drives currently backing up other services will not be available.

Depending on the amount of data in ${this.app.title}, your first backup may take a while. Since backups are diff-based, the speed of future backups to the same disk will likely be much faster.`, - buttons: ['Dismiss'], - }) - } else if (this.type === 'restore') { - alert = await this.alertCtrl.create({ - backdropDismiss: false, - header: `Backups`, - message: `Select a location containing the backup you wish to restore for ${this.app.title}.

Restoring ${this.app.title} will re-sync your service with your previous backup. The speed of the restore process depends on the backup size.`, - buttons: ['Dismiss'], - }) - } - await alert.present() - } - - async presentAlert (disk: DiskInfo, partition: DiskPartition): Promise { - if (this.type === 'create') { - this.presentAlertCreateEncrypted(disk, partition) - } else { - this.presentAlertWarn(partition) - } - } - - private async presentAlertCreateEncrypted (disk: DiskInfo, partition: DiskPartition): Promise { - const m = await this.modalCtrl.create({ - componentProps: { - app: this.app, - partition, - }, - cssClass: 'alertlike-modal', - component: AppBackupConfirmationComponent, - backdropDismiss: false, - }) - - m.onWillDismiss().then(res => { - const data = res.data - if (data.cancel) return - // TODO: EJECT-DISKS we hard code the 'eject' last argument to be false, until ejection is an option in the UI. When it is, add it to the data object above ^ - return this.create(disk, partition, data.password, false) - }) - - return await m.present() - } - - private async presentAlertWarn (partition: DiskPartition): Promise { - const alert = await this.alertCtrl.create({ - backdropDismiss: false, - header: `Warning`, - message: `Restoring ${this.app.title} from "${partition.label || partition.logicalname}" will overwrite its current data.

Are you sure you want to continue?`, - buttons: [ - { - text: 'Cancel', - role: 'cancel', - }, { - text: 'Continue', - handler: () => { - this.presentAlertRestore(partition) - }, - }, - ], - }) - await alert.present() - } - - private async presentAlertRestore (partition: DiskPartition): Promise { - const alert = await this.alertCtrl.create({ - backdropDismiss: false, - header: `Decrypt Backup`, - message: `Enter your master password`, - inputs: [ - { - name: 'password', - type: 'password', - placeholder: 'Password', - }, - ], - buttons: [ - { - text: 'Cancel', - role: 'cancel', - }, { - text: 'Restore', - handler: (data) => { - this.restore(partition, data.password) - }, - }, - ], - }) - await alert.present() - } - - private async restore (partition: DiskPartition, password?: string): Promise { - this.error = '' - - const loader = await this.loadingCtrl.create({ - spinner: 'lines', - cssClass: 'loader-ontop-of-all', - }) - await loader.present() - - try { - await this.apiService.restoreAppBackup(this.app.id, partition.logicalname, password) - this.appModel.update({ id: this.app.id, status: AppStatus.RESTORING_BACKUP }) - await this.dismiss() - } catch (e) { - console.error(e) - this.error = e.message - } finally { - await loader.dismiss() - } - } - - private async create (disk: DiskInfo, partition: DiskPartition, password: string, eject: boolean): Promise { - this.error = '' - - const loader = await this.loadingCtrl.create({ - spinner: 'lines', - cssClass: 'loader-ontop-of-all', - }) - await loader.present() - - try { - await this.apiService.createAppBackup(this.app.id, partition.logicalname, password) - this.appModel.update({ id: this.app.id, status: AppStatus.CREATING_BACKUP }) - if (eject) { - this.appModel.watchForBackup(this.app.id).pipe(concatMap( - () => this.apiService.ejectExternalDisk(disk.logicalname), - )).subscribe({ - next: () => this.toastEjection(disk, true), - error: () => this.toastEjection(disk, false), - }) - } - await this.dismiss() - } catch (e) { - console.error(e) - this.error = e.message - } finally { - await loader.dismiss() - } - } - - private async toastEjection (disk: DiskInfo, success: boolean) { - const { header, message, cssClass } = success ? { - header: 'Success', - message: `Drive ${disk.logicalname} ejected successfully`, - cssClass: 'notification-toast', - } : { - header: 'Error', - message: `Drive ${disk.logicalname} did not eject successfully`, - cssClass: 'alert-error-message', - } - const t = await this.toastCtrl.create({ - header, - message, - cssClass, - duration: 2000, - }) - await t.present() - } -} diff --git a/ui/src/app/modals/app-config-injectable/modal-injectable-type.ts b/ui/src/app/modals/app-config-injectable/modal-injectable-type.ts index 03c08bcca..fb8207817 100644 --- a/ui/src/app/modals/app-config-injectable/modal-injectable-type.ts +++ b/ui/src/app/modals/app-config-injectable/modal-injectable-type.ts @@ -1,4 +1,4 @@ import { Type } from '@angular/core' -import { ValueType } from 'src/app/app-config/config-types' +import { ValueType } from 'src/app/pkg-config/config-types' export type AppConfigComponentMapping = { [k in ValueType]: Type } diff --git a/ui/src/app/modals/app-config-list/app-config-list.page.ts b/ui/src/app/modals/app-config-list/app-config-list.page.ts index 1d73541de..c35b48482 100644 --- a/ui/src/app/modals/app-config-list/app-config-list.page.ts +++ b/ui/src/app/modals/app-config-list/app-config-list.page.ts @@ -1,10 +1,10 @@ import { Component, Input } from '@angular/core' import { AlertController } from '@ionic/angular' -import { Annotations, Range } from '../../app-config/config-utilities' +import { Annotations, Range } from '../../pkg-config/config-utilities' import { TrackingModalController } from 'src/app/services/tracking-modal-controller.service' -import { ConfigCursor } from 'src/app/app-config/config-cursor' -import { ValueSpecList, isValueSpecListOf } from 'src/app/app-config/config-types' -import { ModalPresentable } from 'src/app/app-config/modal-presentable' +import { ConfigCursor } from 'src/app/pkg-config/config-cursor' +import { ValueSpecList, isValueSpecListOf } from 'src/app/pkg-config/config-types' +import { ModalPresentable } from 'src/app/pkg-config/modal-presentable' @Component({ selector: 'app-config-list', @@ -106,7 +106,7 @@ export class AppConfigListPage extends ModalPresentable { async presentAlertDelete (key: number, e: Event) { e.stopPropagation() - + const alert = await this.alertCtrl.create({ backdropDismiss: false, header: 'Caution', diff --git a/ui/src/app/modals/app-config-object/app-config-object.page.ts b/ui/src/app/modals/app-config-object/app-config-object.page.ts index 23909fb14..8f6fde306 100644 --- a/ui/src/app/modals/app-config-object/app-config-object.page.ts +++ b/ui/src/app/modals/app-config-object/app-config-object.page.ts @@ -1,7 +1,7 @@ import { Component, Input } from '@angular/core' import { ModalController, AlertController } from '@ionic/angular' -import { ConfigCursor } from 'src/app/app-config/config-cursor' -import { ValueSpecObject } from 'src/app/app-config/config-types' +import { ConfigCursor } from 'src/app/pkg-config/config-cursor' +import { ValueSpecObject } from 'src/app/pkg-config/config-types' @Component({ selector: 'app-config-object', diff --git a/ui/src/app/modals/app-config-union/app-config-union.page.ts b/ui/src/app/modals/app-config-union/app-config-union.page.ts index 0ec5aba81..4d0f34172 100644 --- a/ui/src/app/modals/app-config-union/app-config-union.page.ts +++ b/ui/src/app/modals/app-config-union/app-config-union.page.ts @@ -1,9 +1,9 @@ import { Component, Input, ViewChild } from '@angular/core' import { ModalController } from '@ionic/angular' -import { ConfigCursor } from 'src/app/app-config/config-cursor' -import { ValueSpecUnion } from 'src/app/app-config/config-types' +import { ConfigCursor } from 'src/app/pkg-config/config-cursor' +import { ValueSpecUnion } from 'src/app/pkg-config/config-types' import { ObjectConfigComponent } from 'src/app/components/object-config/object-config.component' -import { mapUnionSpec } from '../../app-config/config-utilities' +import { mapUnionSpec } from '../../pkg-config/config-utilities' @Component({ selector: 'app-config-union', diff --git a/ui/src/app/modals/app-config-value/app-config-value.page.html b/ui/src/app/modals/app-config-value/app-config-value.page.html index b63517006..0f014b1dd 100644 --- a/ui/src/app/modals/app-config-value/app-config-value.page.html +++ b/ui/src/app/modals/app-config-value/app-config-value.page.html @@ -71,7 +71,7 @@

{{ rangeDescription }}

-

+

Default: {{ defaultDescription }}

Units: {{ spec.units }}

diff --git a/ui/src/app/modals/app-config-value/app-config-value.page.ts b/ui/src/app/modals/app-config-value/app-config-value.page.ts index b6eacd782..6742b05b0 100644 --- a/ui/src/app/modals/app-config-value/app-config-value.page.ts +++ b/ui/src/app/modals/app-config-value/app-config-value.page.ts @@ -1,10 +1,10 @@ import { Component, Input } from '@angular/core' -import { getDefaultConfigValue, getDefaultDescription, Range } from 'src/app/app-config/config-utilities' +import { getDefaultConfigValue, getDefaultDescription, Range } from 'src/app/pkg-config/config-utilities' import { AlertController, ToastController } from '@ionic/angular' import { LoaderService } from 'src/app/services/loader.service' import { TrackingModalController } from 'src/app/services/tracking-modal-controller.service' -import { ConfigCursor } from 'src/app/app-config/config-cursor' -import { ValueSpecOf } from 'src/app/app-config/config-types' +import { ConfigCursor } from 'src/app/pkg-config/config-cursor' +import { ValueSpecOf } from 'src/app/pkg-config/config-types' import { copyToClipboard } from 'src/app/util/web.util' @Component({ diff --git a/ui/src/app/components/app-backup-confirmation/app-backup-confirmation.component.html b/ui/src/app/modals/backup-confirmation/backup-confirmation.component.html similarity index 84% rename from ui/src/app/components/app-backup-confirmation/app-backup-confirmation.component.html rename to ui/src/app/modals/backup-confirmation/backup-confirmation.component.html index ff6fa0ee6..ec3b82802 100644 --- a/ui/src/app/components/app-backup-confirmation/app-backup-confirmation.component.html +++ b/ui/src/app/modals/backup-confirmation/backup-confirmation.component.html @@ -8,10 +8,10 @@
Master Password - + - - {{e}} + + {{ error }}
diff --git a/ui/src/app/components/app-backup-confirmation/app-backup-confirmation.component.module.ts b/ui/src/app/modals/backup-confirmation/backup-confirmation.component.module.ts similarity index 60% rename from ui/src/app/components/app-backup-confirmation/app-backup-confirmation.component.module.ts rename to ui/src/app/modals/backup-confirmation/backup-confirmation.component.module.ts index 96a63136a..89523d0c7 100644 --- a/ui/src/app/components/app-backup-confirmation/app-backup-confirmation.component.module.ts +++ b/ui/src/app/modals/backup-confirmation/backup-confirmation.component.module.ts @@ -1,14 +1,14 @@ import { NgModule } from '@angular/core' import { CommonModule } from '@angular/common' -import { AppBackupConfirmationComponent } from './app-backup-confirmation.component' +import { BackupConfirmationComponent } from './backup-confirmation.component' import { IonicModule } from '@ionic/angular' import { RouterModule } from '@angular/router' import { SharingModule } from 'src/app/modules/sharing.module' -import { FormsModule } from '@angular/forms'; +import { FormsModule } from '@angular/forms' @NgModule({ declarations: [ - AppBackupConfirmationComponent, + BackupConfirmationComponent, ], imports: [ CommonModule, @@ -17,6 +17,6 @@ import { FormsModule } from '@angular/forms'; SharingModule, FormsModule, ], - exports: [AppBackupConfirmationComponent], + exports: [BackupConfirmationComponent], }) -export class AppBackupConfirmationComponentModule { } +export class BackupConfirmationComponentModule { } diff --git a/ui/src/app/components/app-backup-confirmation/app-backup-confirmation.component.scss b/ui/src/app/modals/backup-confirmation/backup-confirmation.component.scss similarity index 100% rename from ui/src/app/components/app-backup-confirmation/app-backup-confirmation.component.scss rename to ui/src/app/modals/backup-confirmation/backup-confirmation.component.scss diff --git a/ui/src/app/modals/backup-confirmation/backup-confirmation.component.ts b/ui/src/app/modals/backup-confirmation/backup-confirmation.component.ts new file mode 100644 index 000000000..7856ebe73 --- /dev/null +++ b/ui/src/app/modals/backup-confirmation/backup-confirmation.component.ts @@ -0,0 +1,41 @@ +import { Component, Input } from '@angular/core' +import { ModalController } from '@ionic/angular' +import { PartitionInfo } from 'src/app/services/api/api-types' + +@Component({ + selector: 'backup-confirmation', + templateUrl: './backup-confirmation.component.html', + styleUrls: ['./backup-confirmation.component.scss'], +}) +export class BackupConfirmationComponent { + @Input() name: string + unmasked = false + password: string + message: string + error = '' + + constructor ( + private readonly modalCtrl: ModalController, + ) { } + + ngOnInit () { + this.message = `Enter your master password to create an encrypted backup on "${this.name}".` + } + + toggleMask () { + this.unmasked = !this.unmasked + } + + cancel () { + this.modalCtrl.dismiss({ cancel: true }) + } + + submit () { + if (!this.password || this.password.length < 12) { + this.error = 'Password must be at least 12 characters in length.' + return + } + const { password } = this + this.modalCtrl.dismiss({ password }) + } +} diff --git a/ui/src/app/modals/os-welcome/os-welcome.page.ts b/ui/src/app/modals/os-welcome/os-welcome.page.ts index f88b246be..f301abdbd 100644 --- a/ui/src/app/modals/os-welcome/os-welcome.page.ts +++ b/ui/src/app/modals/os-welcome/os-welcome.page.ts @@ -1,6 +1,5 @@ import { Component, Input } from '@angular/core' import { ModalController } from '@ionic/angular' -import { ServerModel } from 'src/app/models/server-model' import { ApiService } from 'src/app/services/api/api.service' import { ConfigService } from 'src/app/services/config.service' @@ -19,7 +18,7 @@ export class OSWelcomePage { ) { } async dismiss () { - this.apiService.acknowledgeOSWelcome(this.config.version).catch(console.error) + this.apiService.setDbValue({ pointer: '/welcome-ack', value: this.config.version }).catch(console.error) // return false to skip subsequent alert modals (e.g. check for updates modals) // return true to show subsequent alert modals diff --git a/ui/src/app/models/app-model.ts b/ui/src/app/models/app-model.ts index 2b2ad9639..85df9ccb2 100644 --- a/ui/src/app/models/app-model.ts +++ b/ui/src/app/models/app-model.ts @@ -1,177 +1,153 @@ -import { MapSubject, Delta, Update } from '../util/map-subject.util' -import { diff, partitionArray } from '../util/misc.util' -import { PropertySubject, complete } from '../util/property-subject.util' -import { Injectable } from '@angular/core' -import { merge, Observable, of } from 'rxjs' -import { filter, throttleTime, delay, pairwise, mapTo, take } from 'rxjs/operators' -import { Storage } from '@ionic/storage' -import { StorageKeys } from './storage-keys' -import { AppInstalledFull, AppInstalledPreview } from './app-types' +// import { MapSubject, Delta, Update } from '../util/map-subject.util' +// import { diff, partitionArray } from '../util/misc.util' +// import { Injectable } from '@angular/core' +// import { merge, Observable, of } from 'rxjs' +// import { filter, throttleTime, delay, pairwise, mapTo, take } from 'rxjs/operators' +// import { Storage } from '@ionic/storage' +// import { StorageKeys } from './storage-keys' +// import { AppInstalledFull, AppInstalledPreview } from './app-types' -@Injectable({ - providedIn: 'root', -}) -export class AppModel extends MapSubject { - // hasLoaded tells us if we've successfully queried apps from api or storage, even if there are none. - hasLoaded = false - lastUpdatedAt: { [id: string]: Date } = { } - constructor (private readonly storage: Storage) { - super() - // 500ms after first delta, will save to db. Subsequent deltas are ignored for those 500ms. - // Process continues as long as deltas fire. - this.watchDelta().pipe(throttleTime(200), delay(200)).subscribe(() => { - this.commitCache() - }) - } +// @Injectable({ +// providedIn: 'root', +// }) +// export class AppModel extends MapSubject { +// // hasLoaded tells us if we've successfully queried apps from api or storage, even if there are none. +// hasLoaded = false +// lastUpdatedAt: { [id: string]: Date } = { } +// constructor (private readonly storage: Storage) { +// super() +// // 500ms after first delta, will save to db. Subsequent deltas are ignored for those 500ms. +// // Process continues as long as deltas fire. +// this.watchDelta().pipe(throttleTime(200), delay(200)).subscribe(() => { +// this.commitCache() +// }) +// } - update (newValues: Update, timestamp: Date = new Date()): void { - this.lastUpdatedAt[newValues.id] = this.lastUpdatedAt[newValues.id] || timestamp - if (this.lastUpdatedAt[newValues.id] > timestamp) { - return - } else { - super.update(newValues) - this.lastUpdatedAt[newValues.id] = timestamp - } - } +// update (newValues: Update, timestamp: Date = new Date()): void { +// this.lastUpdatedAt[newValues.id] = this.lastUpdatedAt[newValues.id] || timestamp +// if (this.lastUpdatedAt[newValues.id] > timestamp) { +// return +// } else { +// super.update(newValues) +// this.lastUpdatedAt[newValues.id] = timestamp +// } +// } - // client fxns - watchDelta (filterFor?: Delta['action']): Observable> { - return filterFor - ? this.$delta$.pipe(filter(d => d.action === filterFor)) - : this.$delta$.asObservable() - } +// // client fxns +// watchDelta (filterFor?: Delta['action']): Observable> { +// return filterFor +// ? this.$delta$.pipe(filter(d => d.action === filterFor)) +// : this.$delta$.asObservable() +// } - watch (appId: string) : PropertySubject { - const toReturn = super.watch(appId) - if (!toReturn) throw new Error(`Expected Service ${appId} but not found.`) - return toReturn - } +// watch (appId: string) : PropertySubject { +// const toReturn = super.watch(appId) +// if (!toReturn) throw new Error(`Expected Service ${appId} but not found.`) +// return toReturn +// } - // when an app is installing - watchForInstallation (appId: string): Observable { - const toWatch = super.watch(appId) - if (!toWatch) return of(undefined) +// // when an app is installing +// watchForInstallation (appId: string): Observable { +// const toWatch = super.watch(appId) +// if (!toWatch) return of(undefined) - return toWatch.status.pipe( - filter(s => s !== AppStatus.UNREACHABLE && s !== AppStatus.UNKNOWN), - pairwise(), - filter( ([old, _]) => old === AppStatus.INSTALLING ), - take(1), - mapTo(appId), - ) - } +// return toWatch.status.pipe( +// filter(s => s !== AppStatus.UNREACHABLE && s !== AppStatus.UNKNOWN), +// pairwise(), +// filter( ([old, _]) => old === AppStatus.INSTALLING ), +// take(1), +// mapTo(appId), +// ) +// } - // TODO: EJECT-DISKS: we can use this to watch for an app completing its backup process. - watchForBackup (appId: string): Observable { - const toWatch = super.watch(appId) - if (!toWatch) return of(undefined) +// // TODO: EJECT-DISKS: we can use this to watch for an app completing its backup process. +// watchForBackup (appId: string): Observable { +// const toWatch = super.watch(appId) +// if (!toWatch) return of(undefined) - return toWatch.status.pipe( - filter(s => s !== AppStatus.UNREACHABLE && s !== AppStatus.UNKNOWN), - pairwise(), - filter( ([old, _]) => old === AppStatus.CREATING_BACKUP), - take(1), - mapTo(appId), - ) - } +// return toWatch.status.pipe( +// filter(s => s !== AppStatus.UNREACHABLE && s !== AppStatus.UNKNOWN), +// pairwise(), +// filter( ([old, _]) => old === AppStatus.CREATING_BACKUP), +// take(1), +// mapTo(appId), +// ) +// } - watchForInstallations (appIds: { id: string }[]): Observable { - return merge(...appIds.map(({ id }) => this.watchForInstallation(id))).pipe( - filter(t => !!t), - ) - } +// watchForInstallations (appIds: { id: string }[]): Observable { +// return merge(...appIds.map(({ id }) => this.watchForInstallation(id))).pipe( +// filter(t => !!t), +// ) +// } - // cache mgmt - clear (): void { - this.ids.forEach(id => { - complete(this.contents[id] || { } as PropertySubject) - delete this.contents[id] - }) - this.hasLoaded = false - this.contents = { } - this.lastUpdatedAt = { } - } +// // cache mgmt +// clear (): void { +// this.ids.forEach(id => { +// complete(this.contents[id] || { } as PropertySubject) +// delete this.contents[id] +// }) +// this.hasLoaded = false +// this.contents = { } +// this.lastUpdatedAt = { } +// } - private commitCache (): Promise { - return this.storage.set(StorageKeys.APPS_CACHE_KEY, this.all || []) - } +// private commitCache (): Promise { +// return this.storage.set(StorageKeys.APPS_CACHE_KEY, this.all || []) +// } - async restoreCache (): Promise { - const stored = await this.storage.get(StorageKeys.APPS_CACHE_KEY) - console.log(`restored app cache`, stored) - if (stored) this.hasLoaded = true - return (stored || []).map(c => this.add({ ...emptyAppInstalledFull(), ...c, status: AppStatus.UNKNOWN })) - } +// async restoreCache (): Promise { +// const stored = await this.storage.get(StorageKeys.APPS_CACHE_KEY) +// console.log(`restored app cache`, stored) +// if (stored) this.hasLoaded = true +// return (stored || []).map(c => this.add({ ...emptyAppInstalledFull(), ...c, status: AppStatus.UNKNOWN })) +// } - upsertAppFull (app: AppInstalledFull): void { - this.update(app) - } +// upsertAppFull (app: AppInstalledFull): void { +// this.update(app) +// } - // synchronizers - upsertApps (apps: AppInstalledPreview[], timestamp: Date): void { - const [updates, creates] = partitionArray(apps, a => !!this.contents[a.id]) - updates.map(u => this.update(u, timestamp)) - creates.map(c => this.add({ ...emptyAppInstalledFull(), ...c })) - } +// // synchronizers +// upsertApps (apps: AppInstalledPreview[], timestamp: Date): void { +// const [updates, creates] = partitionArray(apps, a => !!this.contents[a.id]) +// updates.map(u => this.update(u, timestamp)) +// creates.map(c => this.add({ ...emptyAppInstalledFull(), ...c })) +// } - syncCache (upToDateApps : AppInstalledPreview[], timestamp: Date) { - this.hasLoaded = true - this.deleteNonexistentApps(upToDateApps) - this.upsertApps(upToDateApps, timestamp) - } +// syncCache (upToDateApps : AppInstalledPreview[], timestamp: Date) { +// this.hasLoaded = true +// this.deleteNonexistentApps(upToDateApps) +// this.upsertApps(upToDateApps, timestamp) +// } - private deleteNonexistentApps (apps: AppInstalledPreview[]): void { - const currentAppIds = apps.map(a => a.id) - const previousAppIds = Object.keys(this.contents) - const appsToDelete = diff(previousAppIds, currentAppIds) - appsToDelete.map(appId => this.delete(appId)) - } +// private deleteNonexistentApps (apps: AppInstalledPreview[]): void { +// const currentAppIds = apps.map(a => a.id) +// const previousAppIds = Object.keys(this.contents) +// const appsToDelete = diff(previousAppIds, currentAppIds) +// appsToDelete.map(appId => this.delete(appId)) +// } - // server state change - markAppsUnreachable (): void { - this.updateAllApps({ status: AppStatus.UNREACHABLE }) - } +// // server state change +// markAppsUnreachable (): void { +// this.updateAllApps({ status: AppStatus.UNREACHABLE }) +// } - markAppsUnknown (): void { - this.updateAllApps({ status: AppStatus.UNKNOWN }) - } +// markAppsUnknown (): void { +// this.updateAllApps({ status: AppStatus.UNKNOWN }) +// } - private updateAllApps (uniformUpdate: Partial) { - this.ids.map(id => { - this.update(Object.assign(uniformUpdate, { id })) - }) - } -} +// private updateAllApps (uniformUpdate: Partial) { +// this.ids.map(id => { +// this.update(Object.assign(uniformUpdate, { id })) +// }) +// } +// } -function emptyAppInstalledFull (): Omit { - return { - instructions: null, - lastBackup: null, - configuredRequirements: null, - hasFetchedFull: false, - actions: [], - } -} - -export interface Rules { - rule: string - description: string -} - -export enum AppStatus { - // shared - UNKNOWN = 'UNKNOWN', - UNREACHABLE = 'UNREACHABLE', - INSTALLING = 'INSTALLING', - NEEDS_CONFIG = 'NEEDS_CONFIG', - RUNNING = 'RUNNING', - STOPPED = 'STOPPED', - CREATING_BACKUP = 'CREATING_BACKUP', - RESTORING_BACKUP = 'RESTORING_BACKUP', - CRASHED = 'CRASHED', - REMOVING = 'REMOVING', - DEAD = 'DEAD', - BROKEN_DEPENDENCIES = 'BROKEN_DEPENDENCIES', - STOPPING = 'STOPPING', - RESTARTING = 'RESTARTING', -} +// function emptyAppInstalledFull (): Omit { +// return { +// instructions: null, +// lastBackup: null, +// configuredRequirements: null, +// hasFetchedFull: false, +// actions: [], +// } +// } diff --git a/ui/src/app/models/app-types.ts b/ui/src/app/models/app-types.ts deleted file mode 100644 index c9218fccf..000000000 --- a/ui/src/app/models/app-types.ts +++ /dev/null @@ -1,146 +0,0 @@ -import { AppStatus } from './app-model' - -/** APPS **/ - -export interface BaseApp { - id: string - title: string - status: AppStatus | null - versionInstalled: string | null - iconURL: string -} - -// available -export interface AppAvailablePreview extends BaseApp { - versionLatest: string - descriptionShort: string - latestVersionTimestamp: Date //used for sorting AAL -} - -export type AppAvailableFull = - AppAvailablePreview & { - descriptionLong: string - versions: string[] - licenseName?: string // @TODO required for 0.3.0 - licenseLink?: string // @TODO required for 0.3.0 - } & - AppAvailableVersionSpecificInfo - - -export interface AppAvailableVersionSpecificInfo { - releaseNotes: string - serviceRequirements: AppDependency[] - versionViewing: string - installAlert?: string -} -// installed - -export interface AppInstalledPreview extends BaseApp { - lanAddress?: string - torAddress: string - versionInstalled: string - lanUi: boolean - torUi: boolean - // FE state only - hasUI: boolean - launchable: boolean -} - -export interface AppInstalledFull extends AppInstalledPreview { - licenseName?: string // @TODO required for 0.3.0 - licenseLink?: string // @TODO required for 0.3.0 - instructions: string | null - lastBackup: string | null - configuredRequirements: AppDependency[] | null // null if not yet configured - startAlert?: string - uninstallAlert?: string - restoreAlert?: string - actions: Actions - // FE state only - hasFetchedFull: boolean -} - -export type Actions = ServiceAction[] -export interface ServiceAction { - id: string, - name: string, - description: string, - warning?: string - allowedStatuses: AppStatus[] -} -export interface AppDependency extends InstalledAppDependency { - // explanation of why it *is* optional. null represents it is required. - optional: string | null - // whether it comes as defualt in the config. This will not be present on an installed app, as we only care - default: boolean -} - -export interface InstalledAppDependency extends Omit { - // semver specification - versionSpec: string - - // an optional description of how this dependency is utlitized by the host app - description: string | null - - // how the requirement is failed, null means satisfied. If the dependency is optional, this should still be set as though it were required. - // This way I can say "it's optional, but also you would need to upgrade it to versionSpec" or "it's optional, but you don't even have it" - // Said another way, if violaion === null, then this thing as a requirement is straight up satisfied. - violation: DependencyViolation | null -} - -export enum DependencyViolationSeverity { - NONE = 0, - OPTIONAL = 1, - RECOMMENDED = 2, - REQUIRED = 3, -} -export function getViolationSeverity (r: AppDependency): DependencyViolationSeverity { - if (!r.optional && r.violation) return DependencyViolationSeverity.REQUIRED - if (r.optional && r.default && r.violation) return DependencyViolationSeverity.RECOMMENDED - if (isOptional(r) && r.violation) return DependencyViolationSeverity.OPTIONAL - return DependencyViolationSeverity.NONE -} - -// optional not recommended -export function isOptional (r: AppDependency): boolean { - return r.optional && !r.default -} - -export function isRecommended (r: AppDependency): boolean { - return r.optional && r.default -} - -export function isMissing (r: AppDependency) { - return r.violation && r.violation.name === 'missing' -} - -export function isMisconfigured (r: AppDependency) { - return r.violation && r.violation.name === 'incompatible-config' -} - -export function isNotRunning (r: AppDependency) { - return r.violation && r.violation.name === 'incompatible-status' -} - -export function isVersionMismatch (r: AppDependency) { - return r.violation && r.violation.name === 'incompatible-version' -} - -export function isInstalling (r: AppDependency) { - return r.violation && r.violation.name === 'incompatible-status' && r.violation.status === AppStatus.INSTALLING -} - - -// both or none -export function getInstalledViolationSeverity (r: InstalledAppDependency): DependencyViolationSeverity { - if (r.violation) return DependencyViolationSeverity.REQUIRED - return DependencyViolationSeverity.NONE -} -// e.g. of I try to uninstall a thing, and some installed apps break, those apps will be returned as instances of this type. -export type DependentBreakage = Omit - -export type DependencyViolation = - { name: 'missing' } | - { name: 'incompatible-version' } | - { name: 'incompatible-config'; ruleViolations: string[]; } | - { name: 'incompatible-status'; status: AppStatus; } diff --git a/ui/src/app/models/model-preload.ts b/ui/src/app/models/model-preload.ts deleted file mode 100644 index 4ce27508f..000000000 --- a/ui/src/app/models/model-preload.ts +++ /dev/null @@ -1,74 +0,0 @@ -import { Injectable } from '@angular/core' -import { AppModel } from './app-model' -import { AppInstalledFull, AppInstalledPreview } from './app-types' -import { ApiService } from '../services/api/api.service' -import { PropertySubject, PropertySubjectId } from '../util/property-subject.util' -import { S9Server, ServerModel } from './server-model' -import { Observable, of, from } from 'rxjs' -import { map, concatMap } from 'rxjs/operators' -import { fromSync$ } from '../util/rxjs.util' - -@Injectable({ - providedIn: 'root', -}) -export class ModelPreload { - constructor ( - private readonly appModel: AppModel, - private readonly api: ApiService, - private readonly serverModel: ServerModel, - ) { } - - apps (): Observable[]> { - return fromSync$(() => this.appModel.getContents()).pipe(concatMap(apps => { - const now = new Date() - if (this.appModel.hasLoaded) { - return of(apps) - } else { - return from(this.api.getInstalledApps()).pipe( - map(appsRes => { - this.appModel.upsertApps(appsRes, now) - return this.appModel.getContents() - }), - ) - }}), - ) - } - - appFull (appId: string): Observable > { - return fromSync$(() => this.appModel.watch(appId)).pipe( - concatMap(app => { - // if we haven't fetched full, don't return till we do - // if we have fetched full, go ahead and return now, but fetch full again in the background - if (!app.hasFetchedFull.getValue()) { - return from(this.loadInstalledApp(appId)) - } else { - this.loadInstalledApp(appId) - return of(app) - } - }), - ) - } - - loadInstalledApp (appId: string): Promise> { - const now = new Date() - return this.api.getInstalledApp(appId).then(res => { - this.appModel.update({ id: appId, ...res, hasFetchedFull: true }, now) - return this.appModel.watch(appId) - }) - } - - server (): Observable> { - return fromSync$(() => this.serverModel.watch()).pipe(concatMap(sw => { - if (sw.versionInstalled.getValue()) { - return of(sw) - } else { - console.warn(`server not present, preloading`) - return from(this.api.getServer()).pipe( - map(res => { - this.serverModel.update(res) - return this.serverModel.watch() - })) - } - })) - } -} diff --git a/ui/src/app/models/patch-db/data-model.ts b/ui/src/app/models/patch-db/data-model.ts new file mode 100644 index 000000000..5d3757ef4 --- /dev/null +++ b/ui/src/app/models/patch-db/data-model.ts @@ -0,0 +1,364 @@ +import { ConfigSpec } from 'src/app/pkg-config/config-types' + +export interface DataModel { + 'server-info': ServerInfo + 'package-data': { [id: string]: PackageDataEntry } + ui: { + 'server-name': string + 'welcome-ack': string + 'auto-check-updates': boolean + } +} + +export interface ServerInfo { + id: string + version: string + 'lan-address': URL + 'tor-address': URL + status: ServerStatus + registry: URL + wifi: WiFiInfo + 'unread-notification-count': number + specs: { + CPU: string + Disk: string + Memory: string + } +} + +export enum ServerStatus { + Running = 'running', + Updating = 'updating', + BackingUp = 'backing-up', +} + +export interface WiFiInfo { + ssids: string[] + selected: string | null + connected: string | null +} + +export interface PackageDataEntry { + state: PackageState + 'static-files': { + license: URL + instructions: URL + icon: URL + } + 'temp-manifest'?: Manifest // exists when: installing, updating, removing + installed?: InstalledPackageDataEntry, // exists when: installed, updating + 'install-progress'?: InstallProgress, // exists when: installing, updating +} + +export interface InstallProgress { + size: number | null + downloaded: number + 'download-complete': boolean + validated: number + 'validation-complete': boolean + read: number + 'read-complete': boolean +} + +export interface InstalledPackageDataEntry { + manifest: Manifest + status: Status + 'interface-info': InterfaceInfo + 'system-pointers': any[] + 'current-dependents': { [id: string]: CurrentDependencyInfo } + 'current-dependencies': { [id: string]: CurrentDependencyInfo } +} + +export interface CurrentDependencyInfo { + pointers: any[] + 'health-checks': string[] // array of health check IDs +} + +export enum PackageState { + Installing = 'installing', + Installed = 'installed', + Updating = 'updating', + Removing = 'removing', +} + +export interface Manifest { + id: string + title: string + version: string + description: { + short: string + long: string + } + 'release-notes': string + license: string // name + 'wrapper-repo': URL + 'upstream-repo': URL + 'support-site': URL + 'marketing-site': URL + 'donation-url': URL | null + alerts: { + install: string | null + uninstall: string | null + restore: string | null + start: string | null + stop: string | null + } + main: ActionImpl + 'health-check': ActionImpl + config: ConfigActions | null + volumes: { [id: string]: Volume } + 'min-os-version': string + interfaces: { [id: string]: InterfaceDef } + backup: BackupActions + migrations: Migrations + actions: { [id: string]: Action } + permissions: any // @TODO + dependencies: DependencyInfo +} + +export interface ActionImpl { + type: 'docker' + image: string + system: boolean + entrypoint: string + args: string[] + mounts: { [id: string]: string } + 'io-format': DockerIoFormat | null + inject: boolean + 'shm-size': string +} + +export enum DockerIoFormat { + Json = 'json', + Yaml = 'yaml', + Cbor = 'cbor', + Toml = 'toml', +} + +export interface ConfigActions { + get: ActionImpl + set: ActionImpl +} + +export type Volume = VolumeData + +export interface VolumeData { + type: VolumeType.Data + readonly: boolean +} + +export interface VolumePointer { + type: VolumeType.Pointer + 'package-id': string + 'volume-id': string + path: string + readonly: boolean +} + +export interface VolumeCertificate { + type: VolumeType.Certificate + 'interface-id': string +} + +export interface VolumeHiddenService { + type: VolumeType.HiddenService + 'interface-id': string +} + +export interface VolumeBackup { + type: VolumeType.Backup + readonly: boolean +} + +export enum VolumeType { + Data = 'data', + Pointer = 'pointer', + Certificate = 'certificate', + HiddenService = 'hidden-service', + Backup = 'backup', +} + +export interface InterfaceDef { + name: string + description: string + ui: boolean + 'tor-config': TorConfig | null + 'lan-config': LanConfig | null + protocols: string[] +} + +export interface TorConfig { + 'hidden-service-version': string + 'port-mapping': { [port: number]: number } +} + +export type LanConfig = { + [port: number]: { ssl: boolean, mapping: number } +} + +export interface BackupActions { + create: ActionImpl + restore: ActionImpl +} + +export interface Migrations { + from: { [versionRange: string]: ActionImpl } + to: { [versionRange: string]: ActionImpl } +} + +export interface Action { + name: string + description: string + warning: string | null + implementation: ActionImpl + 'allowed-statuses': (PackageMainStatus.Stopped | PackageMainStatus.Running)[] + 'input-spec': ConfigSpec +} + +export interface Status { + configured: boolean + main: MainStatus + 'dependency-errors': { [id: string]: DependencyError } +} + +export type MainStatus = MainStatusStopped | MainStatusStopping | MainStatusRunning | MainStatusBackingUp | MainStatusRestoring + +export interface MainStatusStopped { + status: PackageMainStatus.Stopped +} + +export interface MainStatusStopping { + status: PackageMainStatus.Stopping +} + +export interface MainStatusRunning { + status: PackageMainStatus.Running + started: string // UTC date string + health: { [id: string]: HealthCheckResult } +} + +export interface MainStatusBackingUp { + status: PackageMainStatus.BackingUp + started: string | null // UTC date string +} + +export interface MainStatusRestoring { + status: PackageMainStatus.Restoring + running: boolean +} + +export enum PackageMainStatus { + Running = 'running', + Stopping = 'stopping', + Stopped = 'stopped', + BackingUp = 'backing-up', + Restoring = 'restoring', +} + +export type HealthCheckResult = HealthCheckResultWarmingUp | HealthCheckResultDisabled | HealthCheckResultSuccess | HealthCheckResultFailure + +export interface HealthCheckResultWarmingUp { + time: string // UTC date string + result: 'warming-up' +} + +export interface HealthCheckResultDisabled { + time: string // UTC date string + result: 'disabled' +} + +export interface HealthCheckResultSuccess { + time: string // UTC date string + result: 'success' +} + +export interface HealthCheckResultFailure { + time: string // UTC date string + result: 'failure' + error: string +} + +export type DependencyError = DependencyErrorNotInstalled | DependencyErrorNotRunning | DependencyErrorIncorrectVersion | DependencyErrorConfigUnsatisfied | DependencyErrorHealthCheckFailed | DependencyErrorInterfaceHealthChecksFailed + +export enum DependencyErrorType { + NotInstalled = 'not-installed', + NotRunning = 'not-running', + IncorrectVersion = 'incorrect-version', + ConfigUnsatisfied = 'config-unsatisfied', + HealthCheckFailed = 'health-check-failed', + InterfaceHealthChecksFailed = 'interface-health-checks-failed', +} + +export interface DependencyErrorNotInstalled { + type: DependencyErrorType.NotInstalled + title: string + icon: URL +} + +export interface DependencyErrorNotRunning { + type: DependencyErrorType.NotRunning +} + +export interface DependencyErrorIncorrectVersion { + type: DependencyErrorType.IncorrectVersion + expected: string // version range + received: string // version +} + +export interface DependencyErrorConfigUnsatisfied { + type: DependencyErrorType.ConfigUnsatisfied + errors: string[] +} + +export interface DependencyErrorHealthCheckFailed { + type: DependencyErrorType.HealthCheckFailed + check: HealthCheckResult +} + +export interface DependencyErrorInterfaceHealthChecksFailed { + type: DependencyErrorType.InterfaceHealthChecksFailed + failures: { [id: string]: HealthCheckResult } +} + +export interface DependencyInfo { + [id: string]: DependencyEntry +} + +export interface DependencyEntry { + version: string + optional: string | null + recommended: boolean + description: string | null + config: ConfigRuleEntryWithSuggestions[] + interfaces: any[] // @TODO placeholder +} + +export interface ConfigRuleEntryWithSuggestions { + rule: string + description: string + suggestions: Suggestion[] +} + +export interface Suggestion { + condition: string | null + set?: { + var: string + to?: string + 'to-value'?: any + 'to-entropy'?: { charset: string, len: number } + } + delete?: string + push?: { + to: string + value: any + } +} + +export interface InterfaceInfo { + ip: string + addresses: { + [id: string]: { 'tor-address': string, 'lan-address': string } + } +} + +export type URL = string diff --git a/ui/src/app/models/patch-db/local-storage-bootstrap.ts b/ui/src/app/models/patch-db/local-storage-bootstrap.ts new file mode 100644 index 000000000..24880030d --- /dev/null +++ b/ui/src/app/models/patch-db/local-storage-bootstrap.ts @@ -0,0 +1,29 @@ +import { Bootstrapper, DBCache } from 'patch-db-client' +import { DataModel } from './data-model' +import { Injectable } from '@angular/core' +import { Storage } from '@ionic/storage' + +@Injectable({ + providedIn: 'root', +}) +export class LocalStorageBootstrap implements Bootstrapper { + static CONTENT_KEY = 'patch-db-cache' + + constructor ( + private readonly storage: Storage, + ) { } + + async init (): Promise> { + const cache = await this.storage.get(LocalStorageBootstrap.CONTENT_KEY) + if (!cache) return { sequence: 0, data: { } as DataModel } + return cache + } + + async update (cache: DBCache): Promise { + return this.storage.set(LocalStorageBootstrap.CONTENT_KEY, cache) + } + + async clear (): Promise { + return this.storage.remove(LocalStorageBootstrap.CONTENT_KEY) + } +} diff --git a/ui/src/app/models/patch-db/patch-db-model.factory.ts b/ui/src/app/models/patch-db/patch-db-model.factory.ts new file mode 100644 index 000000000..1fcc2b985 --- /dev/null +++ b/ui/src/app/models/patch-db/patch-db-model.factory.ts @@ -0,0 +1,24 @@ +import { PollSource, Source, WebsocketSource } from 'patch-db-client' +import { ConfigService } from 'src/app/services/config.service' +import { DataModel } from './data-model' +import { LocalStorageBootstrap } from './local-storage-bootstrap' +import { PatchDbModel } from './patch-db-model' +import { ApiService } from 'src/app/services/api/api.service' + +export function PatchDbModelFactory ( + config: ConfigService, + bootstrapper: LocalStorageBootstrap, + http: ApiService, +): PatchDbModel { + + const { patchDb: { usePollOverride, poll, websocket, timeoutForMissingRevision }, isConsulate } = config + + let source: Source + if (isConsulate || usePollOverride) { + source = new PollSource({ ...poll }, http) + } else { + source = new WebsocketSource({ ...websocket }) + } + + return new PatchDbModel({ sources: [source, http], bootstrapper, http, timeoutForMissingRevision }) +} \ No newline at end of file diff --git a/ui/src/app/models/patch-db/patch-db-model.ts b/ui/src/app/models/patch-db/patch-db-model.ts new file mode 100644 index 000000000..c477e5e3d --- /dev/null +++ b/ui/src/app/models/patch-db/patch-db-model.ts @@ -0,0 +1,52 @@ +import { Inject, Injectable, InjectionToken } from '@angular/core' +import { PatchDB, PatchDbConfig, Store } from 'patch-db-client' +import { Observable, of, Subscription } from 'rxjs' +import { catchError, finalize } from 'rxjs/operators' +import { DataModel } from './data-model' + +export const PATCH_CONFIG = new InjectionToken>('app.config') + +@Injectable({ + providedIn: 'root', +}) +export class PatchDbModel { + private patchDb: PatchDB + private syncSub: Subscription + initialized = false + + constructor ( + @Inject(PATCH_CONFIG) private readonly conf: PatchDbConfig, + ) { } + + async init (): Promise { + if (this.patchDb) return console.warn('Cannot re-init patchDbModel') + this.patchDb = await PatchDB.init(this.conf) + this.initialized = true + } + + start (): void { + if (this.syncSub) this.stop() + this.syncSub = this.patchDb.sync$().subscribe({ + error: e => console.error('Critical, patch-db-sync sub error', e), + complete: () => console.error('Critical, patch-db-sync sub complete'), + }) + } + + stop (): void { + if (this.syncSub) { + this.syncSub.unsubscribe() + this.syncSub = undefined + } + } + + watch$: Store['watch$'] = (...args: (string | number)[]): Observable => { + // console.log('WATCHING') + return this.patchDb.store.watch$(...(args as [])).pipe( + catchError(e => { + console.error(e) + return of(e.message) + }), + // finalize(() => console.log('unSUBSCRIBing')), + ) + } +} diff --git a/ui/src/app/models/server-model.ts b/ui/src/app/models/server-model.ts deleted file mode 100644 index 5590c57d2..000000000 --- a/ui/src/app/models/server-model.ts +++ /dev/null @@ -1,177 +0,0 @@ -import { Injectable } from '@angular/core' -import { Subject, BehaviorSubject } from 'rxjs' -import { PropertySubject, peekProperties, initPropertySubject } from '../util/property-subject.util' -import { AppModel } from './app-model' -import { ConfigService } from 'src/app/services/config.service' -import { Storage } from '@ionic/storage' -import { throttleTime, delay } from 'rxjs/operators' -import { StorageKeys } from './storage-keys' -@Injectable({ - providedIn: 'root', -}) -export class ServerModel { - lastUpdateTimestamp: Date - $delta$ = new Subject() - private embassy: PropertySubject - - constructor ( - private readonly storage: Storage, - private readonly appModel: AppModel, - private readonly config: ConfigService, - ) { - this.embassy = this.defaultEmbassy() - this.$delta$.pipe( - throttleTime(500), delay(500), - ).subscribe(() => { - this.commitCache() - }) - } - - // client fxns - watch (): PropertySubject { - return this.embassy - } - - peek (): S9Server { - return peekProperties(this.embassy) - } - - update (update: Partial, timestamp: Date = new Date()): void { - if (this.lastUpdateTimestamp > timestamp) return - - if (update.versionInstalled && (update.versionInstalled !== this.config.version) && this.embassy.status.getValue() === ServerStatus.RUNNING) { - console.log('update detected, force reload page') - this.clear() - this.nukeCache().then( - () => location.replace('?upd=' + new Date()), - ) - } - - Object.entries(update).forEach( - ([key, value]) => { - if (!this.embassy[key]) { - console.warn('Received an unexpected key: ', key) - this.embassy[key] = new BehaviorSubject(value) - } else if (JSON.stringify(this.embassy[key].getValue()) !== JSON.stringify(value)) { - this.embassy[key].next(value) - } - }, - ) - this.$delta$.next() - this.lastUpdateTimestamp = timestamp - } - - // cache mgmt - clear () { - this.update(peekProperties(this.defaultEmbassy())) - } - - private commitCache (): Promise { - return this.storage.set(StorageKeys.SERVER_CACHE_KEY, peekProperties(this.embassy)) - } - - private nukeCache (): Promise { - return this.storage.remove(StorageKeys.SERVER_CACHE_KEY) - } - - async restoreCache (): Promise { - const emb = await this.storage.get(StorageKeys.SERVER_CACHE_KEY) - if (emb && emb.versionInstalled === this.config.version) this.update(emb) - } - - // server state change - markUnreachable (): void { - this.update({ status: ServerStatus.UNREACHABLE }) - this.appModel.markAppsUnreachable() - } - - markUnknown (): void { - this.update({ status: ServerStatus.UNKNOWN }) - this.appModel.markAppsUnknown() - } - - defaultEmbassy (): PropertySubject { - return initPropertySubject({ - serverId: undefined, - name: undefined, - origin: this.config.origin, - versionInstalled: undefined, - versionLatest: undefined, - status: ServerStatus.UNKNOWN, - badge: 0, - alternativeRegistryUrl: undefined, - specs: { }, - wifi: { ssids: [], current: undefined }, - ssh: [], - notifications: [], - welcomeAck: true, - autoCheckUpdates: true, - }) - } -} -export interface S9Server { - serverId: string - name: string - origin: string - versionInstalled: string - versionLatest: string | undefined // not on the api as of 0.2.8 - status: ServerStatus - badge: number - alternativeRegistryUrl: string | null - specs: ServerSpecs - wifi: { ssids: string[], current: string } - ssh: SSHFingerprint[] - notifications: S9Notification[] - welcomeAck: boolean - autoCheckUpdates: boolean -} - -export interface S9Notification { - id: string - appId: string - createdAt: string - code: string - title: string - message: string -} - -export interface ServerSpecs { - [key: string]: string | number -} - -export interface ServerMetrics { - [key: string]: { - [key: string]: { - value: string | number | null - unit?: string - } - } -} - -export interface SSHFingerprint { - alg: string - hash: string - hostname: string -} - -export interface DiskInfo { - logicalname: string, - size: string, - description: string | null, - partitions: DiskPartition[] -} - -export interface DiskPartition { - logicalname: string, - isMounted: boolean, // We do not allow backups to mounted partitions - size: string | null, - label: string | null, -} - -export enum ServerStatus { - UNKNOWN = 'UNKNOWN', - UNREACHABLE = 'UNREACHABLE', - UPDATING = 'UPDATING', - NEEDS_CONFIG = 'NEEDS_CONFIG', - RUNNING = 'RUNNING', -} diff --git a/ui/src/app/modules/sharing.module.ts b/ui/src/app/modules/sharing.module.ts index d2bb82f24..92097dc4b 100644 --- a/ui/src/app/modules/sharing.module.ts +++ b/ui/src/app/modules/sharing.module.ts @@ -1,52 +1,65 @@ import { NgModule } from '@angular/core' -import { EmverComparesPipe, EmverSatisfiesPipe, EmverDisplayPipe, EmverIsValidPipe } from '../pipes/emver.pipe' +import { EmverComparesPipe, EmverSatisfiesPipe, EmverDisplayPipe } from '../pipes/emver.pipe' import { IncludesPipe } from '../pipes/includes.pipe' -import { IconPipe } from '../pipes/icon.pipe' import { TypeofPipe } from '../pipes/typeof.pipe' import { MarkdownPipe } from '../pipes/markdown.pipe' -import { PeekPropertiesPipe } from '../pipes/peek-properties.pipe' -import { InstalledLatestComparisonPipe, InstalledViewingComparisonPipe } from '../pipes/installed-latest-comparison.pipe' +// import { InstalledLatestComparisonPipe, InstalledViewingComparisonPipe } from '../pipes/installed-latest-comparison.pipe' import { AnnotationStatusPipe } from '../pipes/annotation-status.pipe' import { TruncateCenterPipe, TruncateEndPipe } from '../pipes/truncate.pipe' import { MaskPipe } from '../pipes/mask.pipe' import { DisplayBulbPipe } from '../pipes/display-bulb.pipe' +import { HasUiPipe, LaunchablePipe, ManifestPipe } from '../pipes/ui.pipe' +import { EmptyPipe } from '../pipes/empty.pipe' +import { StatusPipe } from '../pipes/status.pipe' +import { NotificationColorPipe } from '../pipes/notification-color.pipe' +import { ReactiveComponentModule } from '@ngrx/component' @NgModule({ declarations: [ EmverComparesPipe, EmverSatisfiesPipe, TypeofPipe, - IconPipe, IncludesPipe, MarkdownPipe, - PeekPropertiesPipe, - InstalledLatestComparisonPipe, - InstalledViewingComparisonPipe, + // InstalledLatestComparisonPipe, + // InstalledViewingComparisonPipe, AnnotationStatusPipe, TruncateCenterPipe, TruncateEndPipe, MaskPipe, DisplayBulbPipe, EmverDisplayPipe, - EmverIsValidPipe, + HasUiPipe, + LaunchablePipe, + ManifestPipe, + EmptyPipe, + StatusPipe, + NotificationColorPipe, + ], + imports: [ + ReactiveComponentModule, ], exports: [ EmverComparesPipe, EmverSatisfiesPipe, TypeofPipe, - IconPipe, IncludesPipe, MarkdownPipe, - PeekPropertiesPipe, - InstalledLatestComparisonPipe, + // InstalledLatestComparisonPipe, + // InstalledViewingComparisonPipe, AnnotationStatusPipe, - InstalledViewingComparisonPipe, TruncateEndPipe, TruncateCenterPipe, MaskPipe, DisplayBulbPipe, EmverDisplayPipe, - EmverIsValidPipe, + HasUiPipe, + LaunchablePipe, + ManifestPipe, + EmptyPipe, + StatusPipe, + NotificationColorPipe, + ReactiveComponentModule, ], }) export class SharingModule { } \ No newline at end of file diff --git a/ui/src/app/pages/apps-routes/app-actions/app-actions.page.html b/ui/src/app/pages/apps-routes/app-actions/app-actions.page.html index ac8df4d3a..9b43dfc15 100644 --- a/ui/src/app/pages/apps-routes/app-actions/app-actions.page.html +++ b/ui/src/app/pages/apps-routes/app-actions/app-actions.page.html @@ -8,34 +8,25 @@ - + + - - - {{ error }} - - - - - -

No Actions for {{ vars.title }} {{ vars.versionInstalled }}.

-
-
- - - - + -

{{ action.name }}

-

{{ action.description }}

+

No Actions for {{ manifest.title }} {{ manifest.versionInstalled }}.

-
- + + + + + +

{{ action.value.name }}

+

{{ action.value.description }}

+
+
+
+
+
\ No newline at end of file diff --git a/ui/src/app/pages/apps-routes/app-actions/app-actions.page.ts b/ui/src/app/pages/apps-routes/app-actions/app-actions.page.ts index 65ae37cb0..7f30d05fa 100644 --- a/ui/src/app/pages/apps-routes/app-actions/app-actions.page.ts +++ b/ui/src/app/pages/apps-routes/app-actions/app-actions.page.ts @@ -1,49 +1,37 @@ import { Component } from '@angular/core' import { ActivatedRoute } from '@angular/router' -import { ApiService, isRpcFailure, isRpcSuccess } from 'src/app/services/api/api.service' -import { BehaviorSubject } from 'rxjs' +import { ApiService } from 'src/app/services/api/api.service' import { AlertController } from '@ionic/angular' -import { ModelPreload } from 'src/app/models/model-preload' -import { LoaderService, markAsLoadingDuring$ } from 'src/app/services/loader.service' -import { ServiceAction, AppInstalledFull } from 'src/app/models/app-types' -import { PropertySubject } from 'src/app/util/property-subject.util' -import { map } from 'rxjs/operators' -import { Cleanup } from 'src/app/util/cleanup' -import { AppStatus } from 'src/app/models/app-model' +import { LoaderService } from 'src/app/services/loader.service' import { HttpErrorResponse } from '@angular/common/http' +import { PatchDbModel } from 'src/app/models/patch-db/patch-db-model' +import { Action, InstalledPackageDataEntry, PackageMainStatus } from 'src/app/models/patch-db/data-model' @Component({ selector: 'app-actions', templateUrl: './app-actions.page.html', styleUrls: ['./app-actions.page.scss'], }) -export class AppActionsPage extends Cleanup { - error = '' - $loading$ = new BehaviorSubject(true) - appId: string - app: PropertySubject +export class AppActionsPage { + pkgId: string - constructor( + constructor ( private readonly route: ActivatedRoute, private readonly apiService: ApiService, private readonly alertCtrl: AlertController, - private readonly preload: ModelPreload, private readonly loaderService: LoaderService, - ) { super() } + public readonly patch: PatchDbModel, + ) { } - ngOnInit() { - this.appId = this.route.snapshot.paramMap.get('appId') - - markAsLoadingDuring$(this.$loading$, this.preload.appFull(this.appId)).pipe( - map(app => this.app = app), - ).subscribe({ error: e => this.error = e.message }) + ngOnInit () { + this.pkgId = this.route.snapshot.paramMap.get('pkgId') } - async handleAction(action: ServiceAction) { - if (action.allowedStatuses.includes(this.app.status.getValue())) { + async handleAction (pkg: InstalledPackageDataEntry, action: { key: string, value: Action }) { + if ((action.value['allowed-statuses'] as PackageMainStatus[]).includes(pkg.status.main.status)) { const alert = await this.alertCtrl.create({ header: 'Confirm', - message: `Are you sure you want to execute action "${action.name}"? ${action.warning ? action.warning : ""}`, + message: `Are you sure you want to execute action "${action.value.name}"? ${action.value.warning || ''}`, buttons: [ { text: 'Cancel', @@ -52,7 +40,7 @@ export class AppActionsPage extends Cleanup { { text: 'Execute', handler: () => { - this.executeAction(action) + this.executeAction(pkg.manifest.id, action.key) }, }, ], @@ -83,25 +71,19 @@ export class AppActionsPage extends Cleanup { } } - private async executeAction(action: ServiceAction) { + private async executeAction (pkgId: string, actionId: string) { try { const res = await this.loaderService.displayDuringP( - this.apiService.serviceAction(this.appId, action), + this.apiService.executePackageAction({ id: pkgId, 'action-id': actionId }), ) - if (isRpcFailure(res)) { - this.presentAlertActionFail(res.error.code, res.error.message) - } - - if (isRpcSuccess(res)) { - const successAlert = await this.alertCtrl.create({ - header: 'Execution Complete', - message: res.result.split('\n').join('

'), - buttons: ['OK'], - cssClass: 'alert-success-message', - }) - return await successAlert.present() - } + const successAlert = await this.alertCtrl.create({ + header: 'Execution Complete', + message: res.message.split('\n').join('

'), + buttons: ['OK'], + cssClass: 'alert-success-message', + }) + return await successAlert.present() } catch (e) { if (e instanceof HttpErrorResponse) { this.presentAlertActionFail(e.status, e.message) @@ -111,7 +93,7 @@ export class AppActionsPage extends Cleanup { } } - private async presentAlertActionFail(code: number, message: string): Promise { + private async presentAlertActionFail (code: number, message: string): Promise { const failureAlert = await this.alertCtrl.create({ header: 'Execution Failed', message: `Error code ${code}. ${message}`, diff --git a/ui/src/app/pages/apps-routes/app-available-list/app-available-list.module.ts b/ui/src/app/pages/apps-routes/app-available-list/app-available-list.module.ts index 434130c4c..4c51804b3 100644 --- a/ui/src/app/pages/apps-routes/app-available-list/app-available-list.module.ts +++ b/ui/src/app/pages/apps-routes/app-available-list/app-available-list.module.ts @@ -4,10 +4,8 @@ import { Routes, RouterModule } from '@angular/router' import { IonicModule } from '@ionic/angular' import { AppAvailableListPage } from './app-available-list.page' import { SharingModule } from '../../../modules/sharing.module' -import { PwaBackComponentModule } from 'src/app/components/pwa-back-button/pwa-back.component.module' import { BadgeMenuComponentModule } from 'src/app/components/badge-menu-button/badge-menu.component.module' import { StatusComponentModule } from 'src/app/components/status/status.component.module' -import { UpdateOsBannerComponentModule } from 'src/app/components/update-os-banner/update-os-banner.component.module' const routes: Routes = [ @@ -24,9 +22,7 @@ const routes: Routes = [ RouterModule.forChild(routes), StatusComponentModule, SharingModule, - PwaBackComponentModule, BadgeMenuComponentModule, - UpdateOsBannerComponentModule, ], declarations: [AppAvailableListPage], }) diff --git a/ui/src/app/pages/apps-routes/app-available-list/app-available-list.page.html b/ui/src/app/pages/apps-routes/app-available-list/app-available-list.page.html index 0bce9118f..43b06a332 100644 --- a/ui/src/app/pages/apps-routes/app-available-list/app-available-list.page.html +++ b/ui/src/app/pages/apps-routes/app-available-list/app-available-list.page.html @@ -1,74 +1,87 @@ - Service Marketplace + Embassy Marketplace - + + + - - - - + + - - - + {{ error }} - - - Coming Soon... - EmbassyOS Version {{ v1Status.version }} - - - Get ready. View the update instructions. - - +
+ + {{ cat }} + +
- + Now Available... - EmbassyOS Version {{ v1Status.version }} + EmbassyOS Version {{ eos.version }} - View the update instructions. + {{ eos.headline }} - - - - - - -

- {{app.subject.title | async}} -

-
- Installed -
-
- Update Available -
-
- Installing - -
-
-
- - {{ app.subject.descriptionShort | async }} - -
-
+ + + + + + + + + +

+ {{ pkg.title }} +

+

{{ pkg.version }}

+
+ + Installed + Update Available + +
+ Installing + +
+
+ Updating + +
+
+ Removing + +
+
+
+
+ + {{ pkg.descriptionShort }} + +
+
+
diff --git a/ui/src/app/pages/apps-routes/app-available-list/app-available-list.page.scss b/ui/src/app/pages/apps-routes/app-available-list/app-available-list.page.scss index a5f477245..5110a8ea4 100644 --- a/ui/src/app/pages/apps-routes/app-available-list/app-available-list.page.scss +++ b/ui/src/app/pages/apps-routes/app-available-list/app-available-list.page.scss @@ -5,12 +5,24 @@ padding: 1px 0px 1.5px 0px; } -.instructions-card { - --background: linear-gradient(45deg, #101010 16%, var(--ion-color-medium) 150%); - margin: 16px 10px; +.scrollable { + overflow: auto; + white-space: nowrap; + background-color: var(--ion-color-light); + margin-bottom: 16px; + + /* Hide scrollbar for Chrome, Safari and Opera */ + ::-webkit-scrollbar { + display: none; + } + + /* Hide scrollbar for IE, Edge and Firefox */ + -ms-overflow-style: none; /* IE and Edge */ + scrollbar-width: none; /* Firefox */ } -.available-card { +.eos-card { --background: linear-gradient(45deg, #101010 16%, var(--ion-color-danger) 150%); margin: 16px 10px; -} \ No newline at end of file + cursor: pointer; +} diff --git a/ui/src/app/pages/apps-routes/app-available-list/app-available-list.page.ts b/ui/src/app/pages/apps-routes/app-available-list/app-available-list.page.ts index 6b7c1af6e..1d66b0ccf 100644 --- a/ui/src/app/pages/apps-routes/app-available-list/app-available-list.page.ts +++ b/ui/src/app/pages/apps-routes/app-available-list/app-available-list.page.ts @@ -1,14 +1,11 @@ -import { Component, NgZone } from '@angular/core' +import { Component } from '@angular/core' import { ApiService } from 'src/app/services/api/api.service' -import { AppModel } from 'src/app/models/app-model' -import { AppAvailablePreview, AppInstalledPreview } from 'src/app/models/app-types' -import { pauseFor } from 'src/app/util/misc.util' -import { PropertySubjectId, initPropertySubject } from 'src/app/util/property-subject.util' -import { Subscription, BehaviorSubject, combineLatest } from 'rxjs' -import { take } from 'rxjs/operators' -import { markAsLoadingDuringP } from 'src/app/services/loader.service' -import { OsUpdateService } from 'src/app/services/os-update.service' -import { V1Status } from 'src/app/services/api/api-types' +import { MarketplaceData, MarketplaceEOS, AvailablePreview } from 'src/app/services/api/api-types' +import { wizardModal } from 'src/app/components/install-wizard/install-wizard.component' +import { ModalController } from '@ionic/angular' +import { WizardBaker } from 'src/app/components/install-wizard/prebaked-wizards' +import { PatchDbModel } from 'src/app/models/patch-db/patch-db-model' +import { PackageState } from 'src/app/models/patch-db/data-model' @Component({ selector: 'app-available-list', @@ -16,83 +13,93 @@ import { V1Status } from 'src/app/services/api/api-types' styleUrls: ['./app-available-list.page.scss'], }) export class AppAvailableListPage { - $loading$ = new BehaviorSubject(true) + pageLoading = true + pkgsLoading = true error = '' - installedAppDeltaSubscription: Subscription - apps: PropertySubjectId[] = [] - appsInstalled: PropertySubjectId[] = [] - v1Status: V1Status = { status: 'nothing', version: '' } + + category = 'featured' + query: string + + data: MarketplaceData + eos: MarketplaceEOS + pkgs: AvailablePreview[] = [] + + PackageState = PackageState + + page = 1 + needInfinite = false + readonly perPage = 20 constructor ( private readonly apiService: ApiService, - private readonly appModel: AppModel, - private readonly zone: NgZone, - private readonly osUpdateService: OsUpdateService, + private readonly modalCtrl: ModalController, + private readonly wizardBaker: WizardBaker, + public patch: PatchDbModel, ) { } async ngOnInit () { - this.installedAppDeltaSubscription = this.appModel - .watchDelta('update') - .subscribe(({ id }) => this.mergeInstalledProps(id)) - - markAsLoadingDuringP(this.$loading$, Promise.all([ - this.getApps(), - this.checkV1Status(), - this.osUpdateService.checkWhenNotAvailable$().toPromise(), // checks for an os update, banner component renders conditionally - pauseFor(600), - ])) - } - - ionViewDidEnter () { - this.appModel.getContents().forEach(appInstalled => this.mergeInstalledProps(appInstalled.id)) - } - - async checkV1Status () { try { - this.v1Status = await this.apiService.checkV1Status() - } catch (e) { - console.error(e) - } - } - - mergeInstalledProps (appInstalledId: string) { - const appAvailable = this.apps.find(app => app.id === appInstalledId) - if (!appAvailable) return - - const app = this.appModel.watch(appInstalledId) - combineLatest([app.status, app.versionInstalled]) - .pipe(take(1)) - .subscribe(([status, versionInstalled]) => { - this.zone.run(() => { - appAvailable.subject.status.next(status) - appAvailable.subject.versionInstalled.next(versionInstalled) - }) - }) - } - - ngOnDestroy () { - this.installedAppDeltaSubscription.unsubscribe() - } - - async doRefresh (e: any) { - await Promise.all([ - this.getApps(), - pauseFor(600), - ]) - e.target.complete() - } - - async getApps (): Promise { - try { - this.apps = await this.apiService.getAvailableApps().then(apps => - apps - .sort( (a1, a2) => a2.latestVersionTimestamp.getTime() - a1.latestVersionTimestamp.getTime()) - .map(a => ({ id: a.id, subject: initPropertySubject(a) })), - ) - this.appModel.getContents().forEach(appInstalled => this.mergeInstalledProps(appInstalled.id)) + const [data, eos, pkgs] = await Promise.all([ + this.apiService.getMarketplaceData({ }), + this.apiService.getEos({ }), + this.getPkgs(), + ]) + this.data = data + this.eos = eos + this.pkgs = pkgs } catch (e) { console.error(e) this.error = e.message + } finally { + this.pageLoading = false + this.pkgsLoading = false } } + + async doInfinite (e: any): Promise { + const pkgs = await this.getPkgs() + this.pkgs = this.pkgs.concat(pkgs) + e.target.complete() + } + + async search (e?: any): Promise { + this.query = e.target.value || undefined + this.page = 1 + this.pkgs = await this.getPkgs() + } + + async updateEos (): Promise { + await wizardModal( + this.modalCtrl, + this.wizardBaker.updateOS({ + version: this.eos.version, + releaseNotes: this.eos.notes, + }), + ) + } + + private async getPkgs (): Promise { + this.pkgsLoading = true + try { + const pkgs = await this.apiService.getAvailableList({ + category: this.category, + query: this.query, + page: this.page, + 'per-page': this.perPage, + }) + this.needInfinite = pkgs.length >= this.perPage + this.page++ + return pkgs + } catch (e) { + console.error(e) + this.error = e.message + } finally { + this.pkgsLoading = false + } + } + + async switchCategory (category: string): Promise { + this.category = category + this.pkgs = await this.getPkgs() + } } diff --git a/ui/src/app/pages/apps-routes/app-available-show/app-available-show.module.ts b/ui/src/app/pages/apps-routes/app-available-show/app-available-show.module.ts index 6becbdc70..12921f357 100644 --- a/ui/src/app/pages/apps-routes/app-available-show/app-available-show.module.ts +++ b/ui/src/app/pages/apps-routes/app-available-show/app-available-show.module.ts @@ -2,7 +2,6 @@ import { NgModule } from '@angular/core' import { CommonModule } from '@angular/common' import { Routes, RouterModule } from '@angular/router' import { IonicModule } from '@ionic/angular' -import { DependencyListComponentModule } from '../../../components/dependency-list/dependency-list.component.module' import { AppAvailableShowPage } from './app-available-show.page' import { SharingModule } from 'src/app/modules/sharing.module' import { PwaBackComponentModule } from 'src/app/components/pwa-back-button/pwa-back.component.module' @@ -10,7 +9,6 @@ import { BadgeMenuComponentModule } from 'src/app/components/badge-menu-button/b import { StatusComponentModule } from 'src/app/components/status/status.component.module' import { RecommendationButtonComponentModule } from 'src/app/components/recommendation-button/recommendation-button.component.module' import { InstallWizardComponentModule } from 'src/app/components/install-wizard/install-wizard.component.module' -import { ErrorMessageComponentModule } from 'src/app/components/error-message/error-message.component.module' import { InformationPopoverComponentModule } from 'src/app/components/information-popover/information-popover.component.module' const routes: Routes = [ @@ -25,14 +23,12 @@ const routes: Routes = [ CommonModule, IonicModule, StatusComponentModule, - DependencyListComponentModule, RouterModule.forChild(routes), SharingModule, PwaBackComponentModule, RecommendationButtonComponentModule, BadgeMenuComponentModule, InstallWizardComponentModule, - ErrorMessageComponentModule, InformationPopoverComponentModule, ], declarations: [AppAvailableShowPage], diff --git a/ui/src/app/pages/apps-routes/app-available-show/app-available-show.page.html b/ui/src/app/pages/apps-routes/app-available-show/app-available-show.page.html index bc6b72e36..f276157ac 100644 --- a/ui/src/app/pages/apps-routes/app-available-show/app-available-show.page.html +++ b/ui/src/app/pages/apps-routes/app-available-show/app-available-show.page.html @@ -10,109 +10,140 @@ - - + - + - - - - - - - -

{{ vars.title }}

-

{{ vars.versionViewing | displayEmver }}

- -

Installed

-

Installed at {{vars.versionInstalled | displayEmver}}

-
- -

- -

-
-
+ + + {{ error }} + -
-
- - - Install - - -
- - Go to Service - -
- - Update to {{ vars.versionViewing | displayEmver }} - - - Downgrade to {{ vars.versionViewing | displayEmver }} - -
-
- - - - + + + + + + -

- - - - {{recommendation.title}} -

-
-

{{recommendation.description}}

-

{{vars.title}} version {{vars.versionViewing | displayEmver}} is compatible.

-

{{vars.title}} version {{vars.versionViewing | displayEmver}} is NOT compatible.

-
+

{{ pkg.manifest.title }}

+

{{ pkg.manifest.version | displayEmver }}

+ +

+ Not Installed +

+ + +

+ + {{ localPkg.state }} + +

+ + +

+ Installed at {{ localPkg.installed.manifest.version | displayEmver }} +

+
+
-
+
+ + + + Install + + + + + + + + Go to Service + + + + + Update to {{ pkg.manifest.version | displayEmver }} + + + Downgrade to {{ pkg.manifest.version | displayEmver }} + + + + +
- New in {{ vars.versionViewing | displayEmver }} + + + +

+ + + + {{ rec.dependentTitle }} +

+
+

{{ rec.description }}

+

{{ pkg.manifest.title }} version {{ pkg.manifest.version | displayEmver }} is compatible.

+

{{ pkg.manifest.title }} version {{ pkg.manifest.version | displayEmver }} is NOT compatible.

+ + + +
+
+
+ + + + New in {{ pkg.manifest.version | displayEmver }} - -
+ +
-
- - Description + + + Description + - -
{{ vars.descriptionLong }}
+ +
{{ pkg.manifest.description.long }}
- - - Service Dependencies - + + + + Service Dependencies + - + +
+ + + + + +

+ {{ pkg['dependency-metadata'][dep.key].title }} + (recommended) +

+

{{ dep.value.version | displayEmver }}

+
+
+ + +
+
+
+ + @@ -120,9 +151,10 @@ {{ vars.licenseName }} - - Other versions + + Other versions
- + +
\ No newline at end of file diff --git a/ui/src/app/pages/apps-routes/app-available-show/app-available-show.page.ts b/ui/src/app/pages/apps-routes/app-available-show/app-available-show.page.ts index 227244a79..591c4f421 100644 --- a/ui/src/app/pages/apps-routes/app-available-show/app-available-show.page.ts +++ b/ui/src/app/pages/apps-routes/app-available-show/app-available-show.page.ts @@ -1,81 +1,64 @@ -import { Component, NgZone } from '@angular/core' +import { Component } from '@angular/core' import { ActivatedRoute } from '@angular/router' -import { AppAvailableFull, AppAvailableVersionSpecificInfo } from 'src/app/models/app-types' import { ApiService } from 'src/app/services/api/api.service' import { AlertController, ModalController, NavController, PopoverController } from '@ionic/angular' -import { markAsLoadingDuring$ } from 'src/app/services/loader.service' -import { BehaviorSubject, from, Observable, of } from 'rxjs' -import { catchError, concatMap, filter, switchMap, tap } from 'rxjs/operators' import { Recommendation } from 'src/app/components/recommendation-button/recommendation-button.component' import { wizardModal } from 'src/app/components/install-wizard/install-wizard.component' import { WizardBaker } from 'src/app/components/install-wizard/prebaked-wizards' -import { AppModel } from 'src/app/models/app-model' -import { initPropertySubject, peekProperties, PropertySubject } from 'src/app/util/property-subject.util' -import { Cleanup } from 'src/app/util/cleanup' import { InformationPopoverComponent } from 'src/app/components/information-popover/information-popover.component' import { Emver } from 'src/app/services/emver.service' import { displayEmver } from 'src/app/pipes/emver.pipe' import { pauseFor } from 'src/app/util/misc.util' +import { AvailableShow } from 'src/app/services/api/api-types' +import { PatchDbModel } from 'src/app/models/patch-db/patch-db-model' +import { PackageState } from 'src/app/models/patch-db/data-model' @Component({ selector: 'app-available-show', templateUrl: './app-available-show.page.html', styleUrls: ['./app-available-show.page.scss'], }) -export class AppAvailableShowPage extends Cleanup { - $loading$ = new BehaviorSubject(true) +export class AppAvailableShowPage { + loading = true + error = '' + pkg: AvailableShow + pkgId: string - // When a new version is selected - $newVersionLoading$ = new BehaviorSubject(false) - // When dependencies are refreshing - $dependenciesLoading$ = new BehaviorSubject(false) + PackageState = PackageState - $error$ = new BehaviorSubject(undefined) - $app$: PropertySubject = { } as any - appId: string + rec: Recommendation | null = null + showRec = true - openRecommendation = false - recommendation: Recommendation | null = null - - serviceDependencyDefintion = 'Service Dependencies are other services that this service recommends or requires in order to run.' + depDefinition = 'Service Dependencies are other services that this service recommends or requires in order to run.' constructor ( private readonly route: ActivatedRoute, private readonly apiService: ApiService, private readonly alertCtrl: AlertController, - private readonly zone: NgZone, private readonly modalCtrl: ModalController, private readonly wizardBaker: WizardBaker, private readonly navCtrl: NavController, - private readonly appModel: AppModel, private readonly popoverController: PopoverController, private readonly emver: Emver, - ) { - super() - } + public readonly patch: PatchDbModel, + ) { } async ngOnInit () { - this.appId = this.route.snapshot.paramMap.get('appId') as string - - this.cleanup( - // new version always includes dependencies, but not vice versa - this.$newVersionLoading$.subscribe(this.$dependenciesLoading$), - markAsLoadingDuring$(this.$loading$, - from(this.apiService.getAvailableApp(this.appId)).pipe( - tap(app => this.$app$ = initPropertySubject(app)), - concatMap(() => this.fetchRecommendation()), - ), - ).pipe( - concatMap(() => this.syncWhenDependencyInstalls()), //must be final in stack - catchError(e => of(this.setError(e))), - ).subscribe(), - ) + this.pkgId = this.route.snapshot.paramMap.get('pkgId') as string + this.rec = history.state && history.state.installRec as Recommendation + this.getPkg() } - ionViewDidEnter () { - markAsLoadingDuring$(this.$dependenciesLoading$, this.syncVersionSpecificInfo()).subscribe({ - error: e => this.setError(e), - }) + async getPkg (version?: string): Promise { + this.loading = true + try { + this.pkg = await this.apiService.getAvailableShow({ id: this.pkgId, version }) + } catch (e) { + console.error(e) + this.error = e.message + } finally { + this.loading = false + } } async presentPopover (information: string, ev: any) { @@ -92,34 +75,17 @@ export class AppAvailableShowPage extends Cleanup { return await popover.present() } - syncVersionSpecificInfo (versionSpec?: string): Observable { - if (!this.$app$.versionViewing) return of({ }) - const specToFetch = versionSpec || `=${this.$app$.versionViewing.getValue()}` - return from(this.apiService.getAvailableAppVersionSpecificInfo(this.appId, specToFetch)).pipe( - tap(versionInfo => this.mergeInfo(versionInfo)), - ) - } - - private mergeInfo (versionSpecificInfo: AppAvailableVersionSpecificInfo) { - this.zone.run(() => { - Object.entries(versionSpecificInfo).forEach( ([k, v]) => { - if (!this.$app$[k]) this.$app$[k] = new BehaviorSubject(undefined) - if (v !== this.$app$[k].getValue()) this.$app$[k].next(v) - }) - }) - } - async presentAlertVersions () { - const app = peekProperties(this.$app$) const alert = await this.alertCtrl.create({ header: 'Versions', backdropDismiss: false, - inputs: app.versions.sort((a, b) => -1 * this.emver.compare(a, b)).map(v => { - return { name: v, // for CSS + inputs: this.pkg.versions.sort((a, b) => -1 * this.emver.compare(a, b)).map(v => { + return { + name: v, // for CSS type: 'radio', label: displayEmver(v), // appearance on screen value: v, // literal SEM version value - checked: app.versionViewing === v, + checked: this.pkg.manifest.version === v, } }), buttons: [ @@ -129,17 +95,7 @@ export class AppAvailableShowPage extends Cleanup { }, { text: 'Ok', handler: (version: string) => { - const previousVersion = this.$app$.versionViewing.getValue() - this.$app$.versionViewing.next(version) - markAsLoadingDuring$( - this.$newVersionLoading$, this.syncVersionSpecificInfo(`=${version}`), - ) - .subscribe({ - error: e => { - this.setError(e) - this.$app$.versionViewing.next(previousVersion) - }, - }) + this.getPkg(version) }, }, ], @@ -149,15 +105,14 @@ export class AppAvailableShowPage extends Cleanup { } async install () { - const app = peekProperties(this.$app$) + const { id, title, version, dependencies, alerts } = this.pkg.manifest const { cancelled } = await wizardModal( this.modalCtrl, this.wizardBaker.install({ - id: app.id, - title: app.title, - version: app.versionViewing, - serviceRequirements: app.serviceRequirements, - installAlert: app.installAlert, + id, + title, + version, + installAlert: alerts.install, }), ) if (cancelled) return @@ -166,14 +121,13 @@ export class AppAvailableShowPage extends Cleanup { } async update (action: 'update' | 'downgrade') { - const app = peekProperties(this.$app$) - + const { id, title, version, dependencies, alerts } = this.pkg.manifest const value = { - id: app.id, - title: app.title, - version: app.versionViewing, - serviceRequirements: app.serviceRequirements, - installAlert: app.installAlert, + id, + title, + version, + serviceRequirements: dependencies, + installAlert: alerts.install, } const { cancelled } = await wizardModal( @@ -188,27 +142,7 @@ export class AppAvailableShowPage extends Cleanup { this.navCtrl.back() } - private fetchRecommendation (): Observable { - this.recommendation = history.state && history.state.installationRecommendation - - if (this.recommendation) { - return from(this.syncVersionSpecificInfo(this.recommendation.versionSpec)) - } else { - return of({ }) - } - } - - private syncWhenDependencyInstalls (): Observable { - return this.$app$.serviceRequirements.pipe( - filter(deps => !!deps), - switchMap(deps => this.appModel.watchForInstallations(deps)), - concatMap(() => markAsLoadingDuring$(this.$dependenciesLoading$, this.syncVersionSpecificInfo())), - catchError(e => of(console.error(e))), - ) - } - - private setError (e: Error) { - console.error(e) - this.$error$.next(e.message) + dismissRec () { + this.showRec = false } } diff --git a/ui/src/app/pages/apps-routes/app-config/app-config.module.ts b/ui/src/app/pages/apps-routes/app-config/app-config.module.ts index 9252d3203..92ed8db4c 100644 --- a/ui/src/app/pages/apps-routes/app-config/app-config.module.ts +++ b/ui/src/app/pages/apps-routes/app-config/app-config.module.ts @@ -10,8 +10,6 @@ import { AppConfigObjectPageModule } from 'src/app/modals/app-config-object/app- import { AppConfigUnionPageModule } from 'src/app/modals/app-config-union/app-config-union.module' import { AppConfigValuePageModule } from 'src/app/modals/app-config-value/app-config-value.module' import { SharingModule } from 'src/app/modules/sharing.module' -import { PwaBackComponentModule } from 'src/app/components/pwa-back-button/pwa-back.component.module' -import { BadgeMenuComponentModule } from 'src/app/components/badge-menu-button/badge-menu.component.module' import { RecommendationButtonComponentModule } from 'src/app/components/recommendation-button/recommendation-button.component.module' import { InformationPopoverComponentModule } from 'src/app/components/information-popover/information-popover.component.module' @@ -19,7 +17,6 @@ const routes: Routes = [ { path: '', component: AppConfigPage, - // canDeactivate: [CanDeactivateGuard], }, ] @@ -35,8 +32,6 @@ const routes: Routes = [ FormsModule, IonicModule, RouterModule.forChild(routes), - PwaBackComponentModule, - BadgeMenuComponentModule, RecommendationButtonComponentModule, InformationPopoverComponentModule, ], diff --git a/ui/src/app/pages/apps-routes/app-config/app-config.page.html b/ui/src/app/pages/apps-routes/app-config/app-config.page.html index ea02e3409..ed4130cd0 100644 --- a/ui/src/app/pages/apps-routes/app-config/app-config.page.html +++ b/ui/src/app/pages/apps-routes/app-config/app-config.page.html @@ -5,25 +5,27 @@ - {{ app['title'] | async }} + {{ pkg.manifest.title }} -
- - - {{$loadingText$ | async}} - -
+ + + + +

{{ loadingText }}

+
+
+
- + -

{{error.text}}

+

{{ error.text }}

{{error.moreInfo.buttonText}}

@@ -33,44 +35,45 @@
- +
- - + + +

Initial Config

-

To use the default config for {{ app.title | async }}, click "Save" below.

+

To use the default config for {{ app.title | ngrxPush }}, click "Save" below.

- - + +

- + - {{recommendation.title}} + {{ rec.dependentTitle }}

-

{{app.title | async}} config has been modified to satisfy {{recommendation.title}}. +

{{app.title | ngrxPush}} config has been modified to satisfy {{ rec.dependentTitle }}. To accept the changes, click “Save” below.

- More Info - -

- hide + More Info + +

+ hide
- +
@@ -89,18 +92,18 @@ -

No config options for {{ app.title | async }} {{ app.versionInstalled | async }}.

+

No config options for {{ app.title | ngrxPush }} {{ app.versionInstalled | ngrxPush }}.

Save @@ -115,5 +118,5 @@
-
+
diff --git a/ui/src/app/pages/apps-routes/app-config/app-config.page.ts b/ui/src/app/pages/apps-routes/app-config/app-config.page.ts index 3fdb1aa72..770497322 100644 --- a/ui/src/app/pages/apps-routes/app-config/app-config.page.ts +++ b/ui/src/app/pages/apps-routes/app-config/app-config.page.ts @@ -1,80 +1,73 @@ import { Component } from '@angular/core' import { NavController, AlertController, ModalController, PopoverController } from '@ionic/angular' import { ActivatedRoute } from '@angular/router' -import { AppModel, AppStatus } from 'src/app/models/app-model' -import { AppInstalledFull } from 'src/app/models/app-types' import { ApiService } from 'src/app/services/api/api.service' -import { pauseFor, isEmptyObject, modulateTime } from 'src/app/util/misc.util' -import { PropertySubject, peekProperties } from 'src/app/util/property-subject.util' -import { LoaderService, markAsLoadingDuring$ } from 'src/app/services/loader.service' +import { isEmptyObject } from 'src/app/util/misc.util' +import { LoaderService } from 'src/app/services/loader.service' import { TrackingModalController } from 'src/app/services/tracking-modal-controller.service' -import { ModelPreload } from 'src/app/models/model-preload' -import { BehaviorSubject, forkJoin, from, fromEvent, of } from 'rxjs' +import { BehaviorSubject, from, fromEvent, of, Subscription } from 'rxjs' import { catchError, concatMap, map, take, tap } from 'rxjs/operators' import { Recommendation } from 'src/app/components/recommendation-button/recommendation-button.component' import { wizardModal } from 'src/app/components/install-wizard/install-wizard.component' import { WizardBaker } from 'src/app/components/install-wizard/prebaked-wizards' -import { Cleanup } from 'src/app/util/cleanup' import { InformationPopoverComponent } from 'src/app/components/information-popover/information-popover.component' -import { ConfigSpec } from 'src/app/app-config/config-types' -import { ConfigCursor } from 'src/app/app-config/config-cursor' +import { ConfigSpec } from 'src/app/pkg-config/config-types' +import { ConfigCursor } from 'src/app/pkg-config/config-cursor' +import { InstalledPackageDataEntry } from 'src/app/models/patch-db/data-model' +import { PatchDbModel } from 'src/app/models/patch-db/patch-db-model' @Component({ selector: 'app-config', templateUrl: './app-config.page.html', styleUrls: ['./app-config.page.scss'], }) -export class AppConfigPage extends Cleanup { +export class AppConfigPage { error: { text: string, moreInfo?: { title: string, description: string, buttonText: string } } - invalid: string - $loading$ = new BehaviorSubject(true) - $loadingText$ = new BehaviorSubject(undefined) + loadingText$ = new BehaviorSubject(undefined) - app: PropertySubject = { } as any - appId: string + pkg: InstalledPackageDataEntry hasConfig = false - recommendation: Recommendation | null = null - showRecommendation = true - openRecommendation = false + backButtonDefense = false + rec: Recommendation | null = null + showRec = true + openRec = false + + invalid: string edited: boolean added: boolean rootCursor: ConfigCursor<'object'> spec: ConfigSpec config: object - AppStatus = AppStatus + subs: Subscription[] constructor ( private readonly navCtrl: NavController, private readonly route: ActivatedRoute, private readonly wizardBaker: WizardBaker, - private readonly preload: ModelPreload, private readonly apiService: ApiService, private readonly loader: LoaderService, private readonly alertCtrl: AlertController, private readonly modalController: ModalController, private readonly trackingModalCtrl: TrackingModalController, private readonly popoverController: PopoverController, - private readonly appModel: AppModel, - ) { super() } - - backButtonDefense = false + private readonly patch: PatchDbModel, + ) { } async ngOnInit () { - this.appId = this.route.snapshot.paramMap.get('appId') as string + const pkgId = this.route.snapshot.paramMap.get('pkgId') as string - this.route.params.pipe(take(1)).subscribe(params => { - if (params.edit) { - window.history.back() - } - }) - - this.cleanup( + this.subs = [ + this.route.params.pipe(take(1)).subscribe(params => { + if (params.edit) { + window.history.back() + } + }), fromEvent(window, 'popstate').subscribe(() => { this.backButtonDefense = false this.trackingModalCtrl.dismissAll() @@ -90,49 +83,51 @@ export class AppConfigPage extends Cleanup { this.navCtrl.back() } }), - ) + ] - markAsLoadingDuring$(this.$loading$, - from(this.preload.appFull(this.appId)) - .pipe( - tap(app => this.app = app), - tap(() => this.$loadingText$.next(`Fetching config spec...`)), - concatMap(() => forkJoin([this.apiService.getAppConfig(this.appId), pauseFor(600)])), - concatMap(([{ spec, config }]) => { - const rec = history.state && history.state.configRecommendation as Recommendation - if (rec) { - this.$loadingText$.next(`Setting properties to accomodate ${rec.title}...`) - return from(this.apiService.postConfigureDependency(this.appId, rec.appId, true)) - .pipe( - map(res => ({ - spec, - config, - dependencyConfig: res.config, - })), - tap(() => this.recommendation = rec), - catchError(e => { - this.error = { text: `Could not set properties to accomodate ${rec.title}: ${e.message}`, moreInfo: { - title: `${rec.title} requires the following:`, - description: rec.description, - buttonText: 'Configure Manually', - } } - return of({ spec, config, dependencyConfig: null }) - }), - ) - } else { + this.patch.watch$('package-data', pkgId, 'installed') + .pipe( + tap(pkg => this.pkg = pkg), + tap(() => this.loadingText$.next(`Fetching config spec...`)), + concatMap(() => this.apiService.getPackageConfig({ id: pkgId })), + concatMap(({ spec, config }) => { + const rec = history.state && history.state.configRecommendation as Recommendation + if (rec) { + this.loadingText$.next(`Setting properties to accommodate ${rec.dependentTitle}...`) + return from(this.apiService.dryConfigureDependency({ 'dependency-id': pkgId, 'dependent-id': rec.dependentId })) + .pipe( + map(res => ({ + spec, + config, + dependencyConfig: res, + })), + tap(() => this.rec = rec), + catchError(e => { + this.error = { text: `Could not set properties to accommodate ${rec.dependentTitle}: ${e.message}`, moreInfo: { + title: `${rec.dependentTitle} requires the following:`, + description: rec.description, + buttonText: 'Configure Manually', + } } return of({ spec, config, dependencyConfig: null }) - } - }), - map(({ spec, config, dependencyConfig }) => this.setConfig(spec, config, dependencyConfig)), - tap(() => this.$loadingText$.next(undefined)), - ), + }), + ) + } else { + return of({ spec, config, dependencyConfig: null }) + } + }), + map(({ spec, config, dependencyConfig }) => this.setConfig(spec, config, dependencyConfig)), + tap(() => this.loadingText$.next(undefined)), + take(1), ).subscribe({ - error: e => { - console.error(e) - this.error = { text: e.message } - }, + error: e => { + console.error(e.message) + this.error = { text: e.message } }, - ) + }) + } + + ngOnDestroy () { + this.subs.forEach(sub => sub.unsubscribe()) } async presentPopover (title: string, description: string, ev: any) { @@ -165,8 +160,8 @@ export class AppConfigPage extends Cleanup { this.hasConfig = !isEmptyObject(this.spec) } - dismissRecommendation () { - this.showRecommendation = false + dismissRec () { + this.showRec = false } dismissError () { @@ -181,38 +176,30 @@ export class AppConfigPage extends Cleanup { } } - async save () { - const app = peekProperties(this.app) - const ogAppStatus = app.status - + async save (pkg: InstalledPackageDataEntry) { return this.loader.of({ message: `Saving config...`, spinner: 'lines', cssClass: 'loader', }).displayDuringAsync(async () => { - const config = this.config - const { breakages } = await this.apiService.patchAppConfig(app, config, true) + const { breakages } = await this.apiService.drySetPackageConfig({ id: pkg.manifest.id, config: this.config }) if (breakages.length) { const { cancelled } = await wizardModal( this.modalController, this.wizardBaker.configure({ - app, + pkg, breakages, }), ) if (cancelled) return { skip: true } } - return this.apiService.patchAppConfig(app, config).then( - () => this.preload.loadInstalledApp(this.appId).then(() => ({ skip: false })), - ) + return this.apiService.setPackageConfig({ id: pkg.manifest.id, config: this.config }) + .then(() => ({ skip: false })) }) .then(({ skip }) => { if (skip) return - if (ogAppStatus === AppStatus.RUNNING) { - this.appModel.update({ id: this.appId, status: AppStatus.RESTARTING }, modulateTime(new Date(), 3, 'seconds')) - } this.navCtrl.back() }) .catch(e => this.error = { text: e.message }) diff --git a/ui/src/app/pages/apps-routes/app-installed-list/app-installed-list.module.ts b/ui/src/app/pages/apps-routes/app-installed-list/app-installed-list.module.ts index 5d881d79d..298daed57 100644 --- a/ui/src/app/pages/apps-routes/app-installed-list/app-installed-list.module.ts +++ b/ui/src/app/pages/apps-routes/app-installed-list/app-installed-list.module.ts @@ -1,15 +1,10 @@ import { NgModule } from '@angular/core' import { CommonModule } from '@angular/common' import { Routes, RouterModule } from '@angular/router' - import { IonicModule } from '@ionic/angular' - -import { DependencyListComponentModule } from 'src/app/components/dependency-list/dependency-list.component.module' import { AppInstalledListPage } from './app-installed-list.page' import { StatusComponentModule } from 'src/app/components/status/status.component.module' import { SharingModule } from 'src/app/modules/sharing.module' -import { AppBackupPageModule } from 'src/app/modals/app-backup/app-backup.module' -import { PwaBackComponentModule } from 'src/app/components/pwa-back-button/pwa-back.component.module' import { BadgeMenuComponentModule } from 'src/app/components/badge-menu-button/badge-menu.component.module' const routes: Routes = [ @@ -23,14 +18,13 @@ const routes: Routes = [ imports: [ CommonModule, StatusComponentModule, - DependencyListComponentModule, - AppBackupPageModule, SharingModule, IonicModule, RouterModule.forChild(routes), - PwaBackComponentModule, BadgeMenuComponentModule, ], - declarations: [AppInstalledListPage], + declarations: [ + AppInstalledListPage, + ], }) export class AppInstalledListPageModule { } diff --git a/ui/src/app/pages/apps-routes/app-installed-list/app-installed-list.page.html b/ui/src/app/pages/apps-routes/app-installed-list/app-installed-list.page.html index 0151a4f39..3ba67e552 100644 --- a/ui/src/app/pages/apps-routes/app-installed-list/app-installed-list.page.html +++ b/ui/src/app/pages/apps-routes/app-installed-list/app-installed-list.page.html @@ -8,52 +8,9 @@ - + - - - - - - - {{ error }} - - - - - - - - -
-
- -
-
- - - - - - - - - -

{{ vars.title }}

-
-
-
-
-
-
- -
+

Welcome to your Embassy

Get started by installing your first service.

@@ -63,5 +20,32 @@ Marketplace
+ + + + + + +
+
+ +
+
+ + + + + + + + + +

{{ (pkg.value | manifest).title }}

+
+
+
+
+
+
diff --git a/ui/src/app/pages/apps-routes/app-installed-list/app-installed-list.page.ts b/ui/src/app/pages/apps-routes/app-installed-list/app-installed-list.page.ts index 814713f09..991e3740c 100644 --- a/ui/src/app/pages/apps-routes/app-installed-list/app-installed-list.page.ts +++ b/ui/src/app/pages/apps-routes/app-installed-list/app-installed-list.page.ts @@ -1,126 +1,29 @@ import { Component } from '@angular/core' -import { AppModel, AppStatus } from 'src/app/models/app-model' -import { AppInstalledPreview } from 'src/app/models/app-types' -import { ModelPreload } from 'src/app/models/model-preload' -import { doForAtLeast } from 'src/app/util/misc.util' -import { PropertySubject, PropertySubjectId, toObservable } from 'src/app/util/property-subject.util' -import { markAsLoadingDuring$ } from 'src/app/services/loader.service' -import { BehaviorSubject, Observable, Subscription } from 'rxjs' -import { S9Server, ServerModel, ServerStatus } from 'src/app/models/server-model' -import { SyncDaemon } from 'src/app/services/sync.service' -import { Cleanup } from 'src/app/util/cleanup' import { ConfigService } from 'src/app/services/config.service' +import { ConnectionService } from 'src/app/services/connection.service' +import { PatchDbModel } from 'src/app/models/patch-db/patch-db-model' +import { PackageDataEntry } from 'src/app/models/patch-db/data-model' @Component({ selector: 'app-installed-list', templateUrl: './app-installed-list.page.html', styleUrls: ['./app-installed-list.page.scss'], }) -export class AppInstalledListPage extends Cleanup { - error = '' - initError = '' - $loading$ = new BehaviorSubject(true) - s9Host$: Observable - - AppStatus = AppStatus - - server: PropertySubject - currentServer: S9Server - apps: PropertySubjectId[] = [] - - subsToTearDown: Subscription[] = [] - - updatingFreeze = false - updating = false - segmentValue: 'services' | 'embassy' = 'services' - - showCertDownload : boolean +export class AppInstalledListPage { constructor ( - private readonly serverModel: ServerModel, - private readonly appModel: AppModel, - private readonly preload: ModelPreload, - private readonly syncDaemon: SyncDaemon, private readonly config: ConfigService, - ) { - super() - } + public readonly connectionService: ConnectionService, + public readonly patch: PatchDbModel, + ) { } - ngOnDestroy () { - this.subsToTearDown.forEach(s => s.unsubscribe()) - } - - async ngOnInit () { - this.server = this.serverModel.watch() - this.apps = [] - this.cleanup( - - // serverUpdateSubscription - this.server.status.subscribe(status => { - if (status === ServerStatus.UPDATING) { - this.updating = true - } else { - if (!this.updatingFreeze) { this.updating = false } - } - }), - - // newAppsSubscription - this.appModel.watchDelta('add').subscribe(({ id }) => { - if (this.apps.find(a => a.id === id)) return - this.apps.push({ id, subject: this.appModel.watch(id) }) - }, - ), - - // appsDeletedSubscription - this.appModel.watchDelta('delete').subscribe(({ id }) => { - const i = this.apps.findIndex(a => a.id === id) - this.apps.splice(i, 1) - }), - - // currentServerSubscription - toObservable(this.server).subscribe(currentServerProperties => { - this.currentServer = currentServerProperties - }), - ) - - markAsLoadingDuring$(this.$loading$, this.preload.apps()).subscribe({ - next: apps => { - this.apps = apps - }, - error: e => { - console.error(e) - this.error = e.message - }, - }) - } - - async launchUiTab (id: string, event: Event) { + launchUi (pkg: PackageDataEntry, event: Event): void { event.preventDefault() event.stopPropagation() - - const app = this.apps.find(app => app.id === id).subject - - let uiAddress: string - if (this.config.isTor()) { - uiAddress = `http://${app.torAddress.getValue()}` - } else { - uiAddress = `https://${app.lanAddress.getValue()}` - } - return window.open(uiAddress, '_blank') + window.open(this.config.launchableURL(pkg.installed), '_blank') } - async doRefresh (event: any) { - await doForAtLeast([this.getServerAndApps()], 600) - event.target.complete() - } - - async getServerAndApps (): Promise { - try { - await this.syncDaemon.sync() - this.error = '' - } catch (e) { - console.error(e) - this.error = e.message - } + asIsOrder () { + return 0 } } diff --git a/ui/src/app/pages/apps-routes/app-installed-show/app-installed-show.module.ts b/ui/src/app/pages/apps-routes/app-installed-show/app-installed-show.module.ts index 0d5ecdfce..411c6188c 100644 --- a/ui/src/app/pages/apps-routes/app-installed-show/app-installed-show.module.ts +++ b/ui/src/app/pages/apps-routes/app-installed-show/app-installed-show.module.ts @@ -1,18 +1,13 @@ import { NgModule } from '@angular/core' import { CommonModule } from '@angular/common' import { Routes, RouterModule } from '@angular/router' - import { IonicModule } from '@ionic/angular' - -import { DependencyListComponentModule } from 'src/app/components/dependency-list/dependency-list.component.module' import { AppInstalledShowPage } from './app-installed-show.page' import { StatusComponentModule } from 'src/app/components/status/status.component.module' import { SharingModule } from 'src/app/modules/sharing.module' -import { AppBackupPageModule } from 'src/app/modals/app-backup/app-backup.module' import { PwaBackComponentModule } from 'src/app/components/pwa-back-button/pwa-back.component.module' import { BadgeMenuComponentModule } from 'src/app/components/badge-menu-button/badge-menu.component.module' import { InstallWizardComponentModule } from 'src/app/components/install-wizard/install-wizard.component.module' -import { ErrorMessageComponentModule } from 'src/app/components/error-message/error-message.component.module' import { InformationPopoverComponentModule } from 'src/app/components/information-popover/information-popover.component.module' const routes: Routes = [ @@ -26,15 +21,12 @@ const routes: Routes = [ imports: [ CommonModule, StatusComponentModule, - DependencyListComponentModule, - AppBackupPageModule, SharingModule, IonicModule, RouterModule.forChild(routes), PwaBackComponentModule, BadgeMenuComponentModule, InstallWizardComponentModule, - ErrorMessageComponentModule, InformationPopoverComponentModule, ], declarations: [AppInstalledShowPage], diff --git a/ui/src/app/pages/apps-routes/app-installed-show/app-installed-show.page.html b/ui/src/app/pages/apps-routes/app-installed-show/app-installed-show.page.html index bdb861cef..28a121ff0 100644 --- a/ui/src/app/pages/apps-routes/app-installed-show/app-installed-show.page.html +++ b/ui/src/app/pages/apps-routes/app-installed-show/app-installed-show.page.html @@ -10,182 +10,173 @@ - - - - - - + - + + {{ error }} + -
- - - - - -
- - {{ vars.title }} - - - {{ vars.versionInstalled | displayEmver }} - -
-
-
- - - - - - Configure - - - Stop - - - Stop Backup - - - Force Uninstall - - - Fix - - - Start - - - - - - Launch Web Interface - - - -
- - - - - - -

Tor Address

-

{{ vars.torAddress }}

-
- - - -
- - -

LAN Address

-

{{ vars.lanAddress }}

-

No LAN address for {{ vars.title }} {{ vars.versionInstalled }}

-
- - - -
- - - - - - - - Create Backup - - Last Backup: {{vars.lastBackup ? (vars.lastBackup | date: 'short') : 'never'}} - - - - - - - Restore from Backup - - - - - - - Instructions - - - - - Config - - - - - Properties - - - - - Actions - - - - - Logs - - - - - Marketplace Listing - - - - - License - {{ vars.licenseName }} - - - - - Dependencies - - - - - - - - - - - - - - Uninstall + + + +
+ + + + + +
+ + {{ manifest.title }} + + + {{ manifest.version | displayEmver }} + +
+
+ + + + + + Configure + + + Stop + + + Fix + + + Start + + + + + + Launch Web Interface + + + +
+ + + + + + + Interfaces + + + + + Instructions + + + + + Config + + + + + Properties + + + + + Actions + + + + + Logs + + + + + Restore from Backup + + + + + Donate + + + + + Marketplace Listing + + + + + + Dependencies + + + + + +
+ + +
+ +
+ +

{{ localDep ? (localDep | manifest).title : pkg.installed.status['dependency-errors'][dep.key]?.title }}

+

{{ manifest.dependencies[dep.key].version | displayEmver }}

+

{{ pkg.installed.status['dependency-errors'][dep.key] ? pkg.installed.status['dependency-errors'][dep.key].type : 'satisfied' }}

+
+ + + View + + + + + Install + + + + + Start + + + Update + + + Configure + + + +
+ +
+ +
+
+
+
+ + + + + + + + Uninstall + + +
-
+
diff --git a/ui/src/app/pages/apps-routes/app-installed-show/app-installed-show.page.scss b/ui/src/app/pages/apps-routes/app-installed-show/app-installed-show.page.scss index 6e824f947..d2e05baf4 100644 --- a/ui/src/app/pages/apps-routes/app-installed-show/app-installed-show.page.scss +++ b/ui/src/app/pages/apps-routes/app-installed-show/app-installed-show.page.scss @@ -48,3 +48,19 @@ --border-radius: 10px; margin: 12px 10px; } + +.dep-badge { + position: absolute; width: 2.5vh; + height: 2.5vh; + border-radius: 50px; + left: -1vh; + top: -1vh; +} + +.dep-issue { + background: radial-gradient(var(--ion-color-warning) 40%, transparent) +} + +.dep-sat { + background: radial-gradient(var(--ion-color-success) 40%, transparent) +} diff --git a/ui/src/app/pages/apps-routes/app-installed-show/app-installed-show.page.ts b/ui/src/app/pages/apps-routes/app-installed-show/app-installed-show.page.ts index 20565233c..72901b92f 100644 --- a/ui/src/app/pages/apps-routes/app-installed-show/app-installed-show.page.ts +++ b/ui/src/app/pages/apps-routes/app-installed-show/app-installed-show.page.ts @@ -1,41 +1,37 @@ import { Component, ViewChild } from '@angular/core' -import { AlertController, NavController, ToastController, ModalController, IonContent, PopoverController } from '@ionic/angular' +import { AlertController, NavController, ModalController, IonContent, PopoverController } from '@ionic/angular' import { ApiService } from 'src/app/services/api/api.service' -import { ActivatedRoute } from '@angular/router' -import { copyToClipboard } from 'src/app/util/web.util' -import { AppModel, AppStatus } from 'src/app/models/app-model' -import { AppInstalledFull } from 'src/app/models/app-types' -import { ModelPreload } from 'src/app/models/model-preload' -import { chill, pauseFor } from 'src/app/util/misc.util' -import { PropertySubject, peekProperties } from 'src/app/util/property-subject.util' -import { AppBackupPage } from 'src/app/modals/app-backup/app-backup.page' -import { LoaderService, markAsLoadingDuring$, markAsLoadingDuringP } from 'src/app/services/loader.service' -import { BehaviorSubject, Observable, of } from 'rxjs' +import { ActivatedRoute, NavigationExtras } from '@angular/router' +import { chill } from 'src/app/util/misc.util' +import { LoaderService } from 'src/app/services/loader.service' +import { Observable, of, Subscription } from 'rxjs' import { wizardModal } from 'src/app/components/install-wizard/install-wizard.component' import { WizardBaker } from 'src/app/components/install-wizard/prebaked-wizards' -import { catchError, concatMap, filter, switchMap, tap } from 'rxjs/operators' -import { Cleanup } from 'src/app/util/cleanup' import { InformationPopoverComponent } from 'src/app/components/information-popover/information-popover.component' import { ConfigService } from 'src/app/services/config.service' +import { PatchDbModel } from 'src/app/models/patch-db/patch-db-model' +import { DependencyErrorConfigUnsatisfied, DependencyErrorNotInstalled, DependencyErrorType, PackageDataEntry, PackageState } from 'src/app/models/patch-db/data-model' +import { FEStatus } from 'src/app/services/pkg-status-rendering.service' +import { ConnectionService } from 'src/app/services/connection.service' +import { Recommendation } from 'src/app/components/recommendation-button/recommendation-button.component' @Component({ selector: 'app-installed-show', templateUrl: './app-installed-show.page.html', styleUrls: ['./app-installed-show.page.scss'], }) -export class AppInstalledShowPage extends Cleanup { - $loading$ = new BehaviorSubject(true) - $loadingDependencies$ = new BehaviorSubject(false) // when true, dependencies will render with spinners. - - $error$ = new BehaviorSubject('') - app: PropertySubject = { } as any - appId: string - AppStatus = AppStatus - showInstructions = false - +export class AppInstalledShowPage { + error: string + pkgId: string + pkg: PackageDataEntry + pkgSub: Subscription hideLAN: boolean - dependencyDefintion = () => `Dependencies are other services which must be installed, configured appropriately, and started in order to start ${this.app.title.getValue()}` + FeStatus = FEStatus + PackageState = PackageState + DependencyErrorType = DependencyErrorType + + depDefinition = 'Service Dependencies are other services that this service recommends or requires in order to run.' @ViewChild(IonContent) content: IonContent @@ -44,115 +40,44 @@ export class AppInstalledShowPage extends Cleanup { private readonly route: ActivatedRoute, private readonly navCtrl: NavController, private readonly loader: LoaderService, - private readonly toastCtrl: ToastController, private readonly modalCtrl: ModalController, private readonly apiService: ApiService, - private readonly preload: ModelPreload, private readonly wizardBaker: WizardBaker, - private readonly appModel: AppModel, private readonly popoverController: PopoverController, private readonly config: ConfigService, - ) { - super() - } + public readonly patch: PatchDbModel, + public readonly connectionService: ConnectionService, + ) { } async ngOnInit () { - this.appId = this.route.snapshot.paramMap.get('appId') as string - - this.cleanup( - markAsLoadingDuring$(this.$loading$, this.preload.appFull(this.appId)) - .pipe( - tap(app => { - this.app = app - const appP = peekProperties(this.app) - this.hideLAN = !appP.lanAddress || (appP.id === 'mastodon' && appP.versionInstalled === '3.3.0') // @TODO delete this hack in 0.3.0 - }), - concatMap(() => this.syncWhenDependencyInstalls()), // must be final in stack - catchError(e => of(this.setError(e))), - ).subscribe(), - ) + this.pkgId = this.route.snapshot.paramMap.get('pkgId') + this.pkgSub = this.patch.watch$('package-data', this.pkgId).subscribe(pkg => this.pkg = pkg) } - ionViewDidEnter () { - markAsLoadingDuringP(this.$loadingDependencies$, this.getApp()) + async ngOnDestroy () { + this.pkgSub.unsubscribe() } - async doRefresh (event: any) { - await Promise.all([ - this.getApp(), - pauseFor(600), - ]) - event.target.complete() - } - - async scrollToRequirements () { - return this.scrollToElement('service-requirements-' + this.appId) - } - - async getApp (): Promise { - try { - await this.preload.loadInstalledApp(this.appId) - this.clearError() - } catch (e) { - this.setError(e) - } - } - - async launchUiTab () { - let uiAddress: string - if (this.config.isTor()) { - uiAddress = `http://${this.app.torAddress.getValue()}` - } else { - uiAddress = `https://${this.app.lanAddress.getValue()}` - } - return window.open(uiAddress, '_blank') - } - - async copyTor () { - const app = peekProperties(this.app) - let message = '' - await copyToClipboard(app.torAddress || '').then(success => { message = success ? 'copied to clipboard!' : 'failed to copy' }) - - const toast = await this.toastCtrl.create({ - header: message, - position: 'bottom', - duration: 1000, - cssClass: 'notification-toast', - }) - await toast.present() - } - - async copyLAN () { - const app = peekProperties(this.app) - let message = '' - await copyToClipboard(app.lanAddress).then(success => { message = success ? 'copied to clipboard!' : 'failed to copy' }) - - const toast = await this.toastCtrl.create({ - header: message, - position: 'bottom', - duration: 1000, - cssClass: 'notification-toast', - }) - await toast.present() + launchUiTab (): void { + window.open(this.config.launchableURL(this.pkg.installed), '_blank') } async stop (): Promise { - const app = peekProperties(this.app) - + const { id, title, version } = this.pkg.installed.manifest await this.loader.of({ - message: `Stopping ${app.title}...`, + message: `Stopping...`, spinner: 'lines', cssClass: 'loader', }).displayDuringAsync(async () => { - const { breakages } = await this.apiService.stopApp(this.appId, true) + const { breakages } = await this.apiService.dryStopPackage({ id }) if (breakages.length) { const { cancelled } = await wizardModal( this.modalCtrl, this.wizardBaker.stop({ - id: app.id, - title: app.title, - version: app.versionInstalled, + id, + title, + version, breakages, }), ) @@ -160,76 +85,28 @@ export class AppInstalledShowPage extends Cleanup { if (cancelled) return { } } - return this.apiService.stopApp(this.appId).then(chill) + return this.apiService.stopPackage({ id }).then(chill) }).catch(e => this.setError(e)) } async tryStart (): Promise { - const app = peekProperties(this.app) - if (app.startAlert) { - this.presentAlertStart(app) + const message = this.pkg.installed.manifest.alerts.start + if (message) { + this.presentAlertStart(message) } else { - this.start(app) + this.start() } } - async presentModalBackup (type: 'create' | 'restore') { - const modal = await this.modalCtrl.create({ - backdropDismiss: false, - component: AppBackupPage, - presentingElement: await this.modalCtrl.getTop(), - componentProps: { - app: peekProperties(this.app), - type, - }, - }) - - await modal.present() - } - - async presentAlertStopBackup (): Promise { - const app = peekProperties(this.app) - - const alert = await this.alertCtrl.create({ - backdropDismiss: false, - header: 'Warning', - message: `${app.title} is not finished backing up. Are you sure you want stop the process?`, - buttons: [ - { - text: 'Cancel', - role: 'cancel', - }, - { - text: 'Stop', - cssClass: 'alert-danger', - handler: () => { - this.stopBackup() - }, - }, - ], - }) - await alert.present() - } - - async stopBackup (): Promise { - await this.loader.of({ - message: `Stopping backup...`, - spinner: 'lines', - cssClass: 'loader', - }).displayDuringP(this.apiService.stopAppBackup(this.appId)) - .catch (e => this.setError(e)) - } - async uninstall () { - const app = peekProperties(this.app) - + const { id, title, version, alerts } = this.pkg.installed.manifest const data = await wizardModal( this.modalCtrl, this.wizardBaker.uninstall({ - id: app.id, - title: app.title, - version: app.versionInstalled, - uninstallAlert: app.uninstallAlert, + id, + title, + version, + uninstallAlert: alerts.uninstall, }), ) @@ -251,10 +128,64 @@ export class AppInstalledShowPage extends Cleanup { return await popover.present() } - private async presentAlertStart (app: AppInstalledFull): Promise { + scrollToRequirements () { + const el = document.getElementById('dependencies') + if (!el) return + let y = el.offsetTop + return this.content.scrollToPoint(0, y, 1000) + } + + async fixDep (action: 'install' | 'update' | 'configure', id: string): Promise { + switch (action) { + case 'install': + case 'update': + return this.installDep(id) + case 'configure': + return this.configureDep(id) + } + } + + private async installDep (depId: string): Promise { + const version = this.pkg.installed.manifest.dependencies[depId].version + const dependentTitle = this.pkg.installed.manifest.title + + const installRec: Recommendation = { + dependentId: this.pkgId, + dependentTitle, + dependentIcon: this.pkg['static-files'].icon, + version, + description: `${dependentTitle} requires an install of ${(this.pkg.installed.status['dependency-errors'][depId] as DependencyErrorNotInstalled)?.title} satisfying ${version}.`, + } + const navigationExtras: NavigationExtras = { + state: { installRec }, + } + + await this.navCtrl.navigateForward(`/services/marketplace/${depId}`, navigationExtras) + } + + private async configureDep (depId: string): Promise { + const configErrors = (this.pkg.installed.status['dependency-errors'][depId] as DependencyErrorConfigUnsatisfied).errors + + const description = `
    ${configErrors.map(d => `
  • ${d}
  • `).join('\n')}
` + const dependentTitle = this.pkg.installed.manifest.title + + const configRecommendation: Recommendation = { + dependentId: this.pkgId, + dependentTitle, + dependentIcon: this.pkg['static-files'].icon, + description, + } + const navigationExtras: NavigationExtras = { + state: { configRecommendation }, + } + + await this.navCtrl.navigateForward(`/services/installed/${depId}/config`, navigationExtras) + } + + private async presentAlertStart (message: string): Promise { const alert = await this.alertCtrl.create({ header: 'Warning', - message: app.startAlert, + message, buttons: [ { text: 'Cancel', @@ -263,7 +194,7 @@ export class AppInstalledShowPage extends Cleanup { { text: 'Start', handler: () => { - this.start(app) + this.start() }, }, ], @@ -271,40 +202,18 @@ export class AppInstalledShowPage extends Cleanup { await alert.present() } - private async start (app: AppInstalledFull): Promise { + private async start (): Promise { this.loader.of({ - message: `Starting ${app.title}...`, + message: `Starting...`, spinner: 'lines', cssClass: 'loader', }).displayDuringP( - this.apiService.startApp(this.appId), + this.apiService.startPackage({ id: this.pkgId }), ).catch(e => this.setError(e)) } private setError (e: Error): Observable { - this.$error$.next(e.message) + this.error = e.message return of() } - - private clearError () { - this.$error$.next('') - } - - private async scrollToElement (elementId: string) { - const el = document.getElementById(elementId) - - if (!el) return - - let y = el.offsetTop - return this.content.scrollToPoint(0, y, 1000) - } - - private syncWhenDependencyInstalls (): Observable { - return this.app.configuredRequirements.pipe( - filter(deps => !!deps), - switchMap(reqs => this.appModel.watchForInstallations(reqs)), - concatMap(() => markAsLoadingDuringP(this.$loadingDependencies$, this.getApp())), - catchError(e => of(console.error(e))), - ) - } } diff --git a/ui/src/app/pages/apps-routes/app-instructions/app-instructions.module.ts b/ui/src/app/pages/apps-routes/app-instructions/app-instructions.module.ts index 1ebba6ab9..edd0c012a 100644 --- a/ui/src/app/pages/apps-routes/app-instructions/app-instructions.module.ts +++ b/ui/src/app/pages/apps-routes/app-instructions/app-instructions.module.ts @@ -21,6 +21,8 @@ const routes: Routes = [ PwaBackComponentModule, SharingModule, ], - declarations: [AppInstructionsPage], + declarations: [ + AppInstructionsPage, + ], }) export class AppInstructionsPageModule { } diff --git a/ui/src/app/pages/apps-routes/app-instructions/app-instructions.page.html b/ui/src/app/pages/apps-routes/app-instructions/app-instructions.page.html index cbb338acd..e0f42904c 100644 --- a/ui/src/app/pages/apps-routes/app-instructions/app-instructions.page.html +++ b/ui/src/app/pages/apps-routes/app-instructions/app-instructions.page.html @@ -7,22 +7,14 @@ - + + - - - - - - -

No instructions for {{ app.title }} {{ app.versionInstalled }}.

-
+ + + {{ error }} -
-
+
+
\ No newline at end of file diff --git a/ui/src/app/pages/apps-routes/app-instructions/app-instructions.page.scss b/ui/src/app/pages/apps-routes/app-instructions/app-instructions.page.scss index e69de29bb..748913e67 100644 --- a/ui/src/app/pages/apps-routes/app-instructions/app-instructions.page.scss +++ b/ui/src/app/pages/apps-routes/app-instructions/app-instructions.page.scss @@ -0,0 +1,3 @@ +.instructions-padding { + padding: 0 16px 16px 16px +} \ No newline at end of file diff --git a/ui/src/app/pages/apps-routes/app-instructions/app-instructions.page.ts b/ui/src/app/pages/apps-routes/app-instructions/app-instructions.page.ts index 9219cf6e5..a6549b2b0 100644 --- a/ui/src/app/pages/apps-routes/app-instructions/app-instructions.page.ts +++ b/ui/src/app/pages/apps-routes/app-instructions/app-instructions.page.ts @@ -1,10 +1,9 @@ import { Component } from '@angular/core' import { ActivatedRoute } from '@angular/router' -import { BehaviorSubject } from 'rxjs' -import { AppInstalledFull } from 'src/app/models/app-types' -import { ModelPreload } from 'src/app/models/model-preload' -import { markAsLoadingDuring$ } from 'src/app/services/loader.service' -import { peekProperties } from 'src/app/util/property-subject.util' +import { concatMap, take, tap } from 'rxjs/operators' +import { PatchDbModel } from 'src/app/models/patch-db/patch-db-model' +import { ApiService } from 'src/app/services/api/api.service' +import { Method } from 'src/app/services/http.service' @Component({ selector: 'app-instructions', @@ -12,25 +11,34 @@ import { peekProperties } from 'src/app/util/property-subject.util' styleUrls: ['./app-instructions.page.scss'], }) export class AppInstructionsPage { - $loading$ = new BehaviorSubject(true) + instructions: string + loading = true error = '' - app: AppInstalledFull = { } as any - appId: string constructor ( private readonly route: ActivatedRoute, - private readonly preload: ModelPreload, + private readonly apiService: ApiService, + private readonly patch: PatchDbModel, ) { } async ngOnInit () { - this.appId = this.route.snapshot.paramMap.get('appId') as string - - markAsLoadingDuring$(this.$loading$, this.preload.appFull(this.appId)).subscribe({ - next: app => this.app = peekProperties(app), - error: e => { - console.error(e) + const pkgId = this.route.snapshot.paramMap.get('pkgId') + this.patch.watch$('package-data', pkgId) + .pipe( + concatMap(pkg => this.apiService.getStatic(pkg['static-files'].instructions)), + tap(instructions => { + console.log(instructions) + this.instructions = instructions + }), + take(1), + ) + .subscribe( + () => { this.loading = false }, + e => { this.error = e.message + this.loading = false }, - }) + () => console.log('COMPLETE'), + ) } } diff --git a/ui/src/app/pages/server-routes/server-config/server-config.module.ts b/ui/src/app/pages/apps-routes/app-interfaces/app-interfaces.module.ts similarity index 64% rename from ui/src/app/pages/server-routes/server-config/server-config.module.ts rename to ui/src/app/pages/apps-routes/app-interfaces/app-interfaces.module.ts index a3fff0a49..f619686d3 100644 --- a/ui/src/app/pages/server-routes/server-config/server-config.module.ts +++ b/ui/src/app/pages/apps-routes/app-interfaces/app-interfaces.module.ts @@ -1,16 +1,15 @@ import { NgModule } from '@angular/core' import { CommonModule } from '@angular/common' -import { IonicModule } from '@ionic/angular' -import { ServerConfigPage } from './server-config.page' import { Routes, RouterModule } from '@angular/router' -import { SharingModule } from 'src/app/modules/sharing.module' +import { IonicModule } from '@ionic/angular' +import { AppInterfacesPage } from './app-interfaces.page' import { PwaBackComponentModule } from 'src/app/components/pwa-back-button/pwa-back.component.module' -import { ObjectConfigComponentModule } from 'src/app/components/object-config/object-config.component.module' +import { SharingModule } from 'src/app/modules/sharing.module' const routes: Routes = [ { path: '', - component: ServerConfigPage, + component: AppInterfacesPage, }, ] @@ -18,11 +17,10 @@ const routes: Routes = [ imports: [ CommonModule, IonicModule, - SharingModule, - ObjectConfigComponentModule, RouterModule.forChild(routes), PwaBackComponentModule, + SharingModule, ], - declarations: [ServerConfigPage], + declarations: [AppInterfacesPage], }) -export class ServerConfigPageModule { } +export class AppInterfacesPageModule { } diff --git a/ui/src/app/pages/apps-routes/app-interfaces/app-interfaces.page.html b/ui/src/app/pages/apps-routes/app-interfaces/app-interfaces.page.html new file mode 100644 index 000000000..bb2091b6d --- /dev/null +++ b/ui/src/app/pages/apps-routes/app-interfaces/app-interfaces.page.html @@ -0,0 +1,52 @@ + + + + + + Interfaces + + + + + + + + + + {{ interface.value.name }} + + + + + {{ interface.value.description }} + + + + + +

Tor Address

+

{{ 'http://' + int['tor-address'] }}

+
+ + + +
+ + +

LAN Address

+

{{ 'https://' + int['lan-address'] }}

+
+ + + +
+ + + Advanced + + +
+
+
+
+
\ No newline at end of file diff --git a/ui/src/app/pages/apps-routes/app-interfaces/app-interfaces.page.scss b/ui/src/app/pages/apps-routes/app-interfaces/app-interfaces.page.scss new file mode 100644 index 000000000..3cb183411 --- /dev/null +++ b/ui/src/app/pages/apps-routes/app-interfaces/app-interfaces.page.scss @@ -0,0 +1,4 @@ +.vertical-align { + display: inline-block; + vertical-align: middle; +} \ No newline at end of file diff --git a/ui/src/app/pages/apps-routes/app-interfaces/app-interfaces.page.ts b/ui/src/app/pages/apps-routes/app-interfaces/app-interfaces.page.ts new file mode 100644 index 000000000..985add52f --- /dev/null +++ b/ui/src/app/pages/apps-routes/app-interfaces/app-interfaces.page.ts @@ -0,0 +1,49 @@ +import { Component } from '@angular/core' +import { ActivatedRoute } from '@angular/router' +import { ToastController } from '@ionic/angular' +import { InstalledPackageDataEntry } from 'src/app/models/patch-db/data-model' +import { PatchDbModel } from 'src/app/models/patch-db/patch-db-model' +import { ConfigService } from 'src/app/services/config.service' +import { copyToClipboard } from 'src/app/util/web.util' + +@Component({ + selector: 'app-Interfaces', + templateUrl: './app-Interfaces.page.html', + styleUrls: ['./app-Interfaces.page.scss'], +}) +export class AppInterfacesPage { + pkgId: string + + constructor ( + private readonly route: ActivatedRoute, + private readonly toastCtrl: ToastController, + private readonly config: ConfigService, + public readonly patch: PatchDbModel, + ) { } + + ngOnInit () { + this.pkgId = this.route.snapshot.paramMap.get('pkgId') + } + + async copy (address: string): Promise { + let message = '' + await copyToClipboard(address || '') + .then(success => { message = success ? 'copied to clipboard!' : 'failed to copy'}) + + const toast = await this.toastCtrl.create({ + header: message, + position: 'bottom', + duration: 1000, + cssClass: 'notification-toast', + }) + await toast.present() + } + + launch (installed: InstalledPackageDataEntry): void { + window.open(this.config.launchableURL(installed), '_blank') + } + + asIsOrder () { + return 0 + } +} diff --git a/ui/src/app/pages/apps-routes/app-logs/app-logs.page.html b/ui/src/app/pages/apps-routes/app-logs/app-logs.page.html index f30dbb389..f38eb4b5e 100644 --- a/ui/src/app/pages/apps-routes/app-logs/app-logs.page.html +++ b/ui/src/app/pages/apps-routes/app-logs/app-logs.page.html @@ -13,9 +13,12 @@ + {{ error }} - + + +

{{ logs }}

\ No newline at end of file diff --git a/ui/src/app/pages/apps-routes/app-logs/app-logs.page.ts b/ui/src/app/pages/apps-routes/app-logs/app-logs.page.ts index 883ee65ee..9662ef20b 100644 --- a/ui/src/app/pages/apps-routes/app-logs/app-logs.page.ts +++ b/ui/src/app/pages/apps-routes/app-logs/app-logs.page.ts @@ -2,9 +2,6 @@ import { Component, ViewChild } from '@angular/core' import { ActivatedRoute } from '@angular/router' import { ApiService } from 'src/app/services/api/api.service' import { IonContent } from '@ionic/angular' -import { pauseFor } from 'src/app/util/misc.util' -import { markAsLoadingDuringP } from 'src/app/services/loader.service' -import { BehaviorSubject } from 'rxjs' @Component({ selector: 'app-logs', @@ -13,38 +10,29 @@ import { BehaviorSubject } from 'rxjs' }) export class AppLogsPage { @ViewChild(IonContent, { static: false }) private content: IonContent - $loading$ = new BehaviorSubject(true) + pkgId: string + logs = '' error = '' - appId: string - logs: string constructor ( private readonly route: ActivatedRoute, private readonly apiService: ApiService, ) { } - async ngOnInit () { - this.appId = this.route.snapshot.paramMap.get('appId') as string - - markAsLoadingDuringP(this.$loading$, Promise.all([ - this.getLogs(), - pauseFor(600), - ])) + ngOnInit () { + this.pkgId = this.route.snapshot.paramMap.get('pkgId') + this.getLogs() } async getLogs () { this.logs = '' - this.$loading$.next(true) + try { - const logs = await this.apiService.getAppLogs(this.appId) - this.logs = logs.join('\n\n') - this.error = '' + const logs = await this.apiService.getPackageLogs({ id: this.pkgId }) + this.logs = logs.map(l => `${l.timestamp} ${l.log}`).join('\n\n') setTimeout(async () => await this.content.scrollToBottom(100), 200) } catch (e) { - console.error(e) this.error = e.message - } finally { - this.$loading$.next(false) } } } diff --git a/ui/src/app/pages/apps-routes/app-metrics/app-metrics.page.html b/ui/src/app/pages/apps-routes/app-metrics/app-metrics.page.html deleted file mode 100644 index 7f4c56860..000000000 --- a/ui/src/app/pages/apps-routes/app-metrics/app-metrics.page.html +++ /dev/null @@ -1,74 +0,0 @@ - - - - - - Properties - - - - - - - - - - - - - {{ error }} - - - - - -

{{ app.title }} is not running. Information on this page could be innacurate.

-
-
- - - - -

No properties for {{ app.title }} {{ app.versionInstalled }}.

-
-
- - - -
- - - - - - -

{{ keyval.key }}

-
- -
- - - - - - -

{{ keyval.key }}

-

{{ keyval.value.masked && !unmasked[keyval.key] ? (keyval.value.value | mask ) : (keyval.value.value | truncateEnd : 100) }}

-
-
- - - - - - - - - -
-
-
-
- -
-
\ No newline at end of file diff --git a/ui/src/app/pages/apps-routes/app-metrics/app-metrics.page.ts b/ui/src/app/pages/apps-routes/app-metrics/app-metrics.page.ts deleted file mode 100644 index 160a7f18f..000000000 --- a/ui/src/app/pages/apps-routes/app-metrics/app-metrics.page.ts +++ /dev/null @@ -1,138 +0,0 @@ -import { Component } from '@angular/core' -import { ActivatedRoute } from '@angular/router' -import { ApiService } from 'src/app/services/api/api.service' -import { pauseFor } from 'src/app/util/misc.util' -import { BehaviorSubject } from 'rxjs' -import { copyToClipboard } from 'src/app/util/web.util' -import { AlertController, NavController, PopoverController, ToastController } from '@ionic/angular' -import { AppMetrics } from 'src/app/util/metrics.util' -import { QRComponent } from 'src/app/components/qr/qr.component' -import { AppMetricStore } from './metric-store' -import * as JSONpointer from 'json-pointer' -import { ModelPreload } from 'src/app/models/model-preload' -import { markAsLoadingDuringP } from 'src/app/services/loader.service' -import { AppInstalledFull } from 'src/app/models/app-types' -import { peekProperties } from 'src/app/util/property-subject.util' - -@Component({ - selector: 'app-metrics', - templateUrl: './app-metrics.page.html', - styleUrls: ['./app-metrics.page.scss'], -}) -export class AppMetricsPage { - error = '' - $loading$ = new BehaviorSubject(true) - appId: string - pointer: string - qrCode: string - app: AppInstalledFull - $metrics$ = new BehaviorSubject({ }) - $hasMetrics$ = new BehaviorSubject(null) - unmasked: { [key: string]: boolean } = { } - - constructor ( - private readonly route: ActivatedRoute, - private readonly apiService: ApiService, - private readonly alertCtrl: AlertController, - private readonly toastCtrl: ToastController, - private readonly popoverCtrl: PopoverController, - private readonly metricStore: AppMetricStore, - private readonly navCtrl: NavController, - private readonly preload: ModelPreload, - ) { } - - ngOnInit () { - this.appId = this.route.snapshot.paramMap.get('appId') - this.pointer = this.route.queryParams['pointer'] - - markAsLoadingDuringP(this.$loading$, Promise.all([ - this.preload.appFull(this.appId).toPromise(), - this.getMetrics(), - pauseFor(600), - ])).then(([app]) => { - this.app = peekProperties(app) - this.metricStore.watch().subscribe(m => { - const metrics = JSONpointer.get(m, this.pointer || '') - this.$metrics$.next(metrics) - }) - this.$metrics$.subscribe(m => { - this.$hasMetrics$.next(!!Object.keys(m || { }).length) - }) - this.route.queryParams.subscribe(queryParams => { - if (queryParams['pointer'] === this.pointer) return - this.pointer = queryParams['pointer'] - const metrics = JSONpointer.get(this.metricStore.$metrics$.getValue(), this.pointer || '') - this.$metrics$.next(metrics) - }) - }) - } - - async doRefresh (event: any) { - await Promise.all([ - this.getMetrics(), - pauseFor(600), - ]) - event.target.complete() - } - - async getMetrics (): Promise { - try { - const metrics = await this.apiService.getAppMetrics(this.appId) - this.metricStore.update(metrics) - } catch (e) { - console.error(e) - this.error = e.message - } - } - - async presentDescription (metric: { key: string, value: AppMetrics[''] }, e: Event) { - e.stopPropagation() - - const alert = await this.alertCtrl.create({ - header: metric.key, - message: metric.value.description, - }) - await alert.present() - } - - async goToNested (key: string): Promise { - this.navCtrl.navigateForward(`/services/installed/${this.appId}/metrics`, { - queryParams: { - pointer: `${this.pointer || ''}/${key}/value`, - }, - }) - } - - async copy (text: string): Promise { - let message = '' - await copyToClipboard(text).then(success => { message = success ? 'copied to clipboard!' : 'failed to copy'}) - - const toast = await this.toastCtrl.create({ - header: message, - position: 'bottom', - duration: 1000, - cssClass: 'notification-toast', - }) - await toast.present() - } - - async showQR (text: string, ev: any): Promise { - const popover = await this.popoverCtrl.create({ - component: QRComponent, - cssClass: 'qr-popover', - event: ev, - componentProps: { - text, - }, - }) - return await popover.present() - } - - toggleMask (key: string) { - this.unmasked[key] = !this.unmasked[key] - } - - asIsOrder (a: any, b: any) { - return 0 - } -} diff --git a/ui/src/app/pages/apps-routes/app-metrics/metric-store.ts b/ui/src/app/pages/apps-routes/app-metrics/metric-store.ts deleted file mode 100644 index c33841b57..000000000 --- a/ui/src/app/pages/apps-routes/app-metrics/metric-store.ts +++ /dev/null @@ -1,15 +0,0 @@ -import { Injectable } from '@angular/core' -import { BehaviorSubject } from 'rxjs' -import { AppMetrics } from '../../../util/metrics.util' - -@Injectable({ - providedIn: 'root', -}) -export class AppMetricStore { - $metrics$: BehaviorSubject = new BehaviorSubject({ }) - watch () { return this.$metrics$.asObservable() } - - update (metrics: AppMetrics): void { - this.$metrics$.next(metrics) - } -} \ No newline at end of file diff --git a/ui/src/app/pages/apps-routes/app-metrics/app-metrics.module.ts b/ui/src/app/pages/apps-routes/app-properties/app-properties.module.ts similarity index 79% rename from ui/src/app/pages/apps-routes/app-metrics/app-metrics.module.ts rename to ui/src/app/pages/apps-routes/app-properties/app-properties.module.ts index 53ef3d727..680bdd4ff 100644 --- a/ui/src/app/pages/apps-routes/app-metrics/app-metrics.module.ts +++ b/ui/src/app/pages/apps-routes/app-properties/app-properties.module.ts @@ -2,7 +2,7 @@ import { NgModule } from '@angular/core' import { CommonModule } from '@angular/common' import { Routes, RouterModule } from '@angular/router' import { IonicModule } from '@ionic/angular' -import { AppMetricsPage } from './app-metrics.page' +import { AppPropertiesPage } from './app-properties.page' import { PwaBackComponentModule } from 'src/app/components/pwa-back-button/pwa-back.component.module' import { QRComponentModule } from 'src/app/components/qr/qr.component.module' import { SharingModule } from 'src/app/modules/sharing.module' @@ -10,7 +10,7 @@ import { SharingModule } from 'src/app/modules/sharing.module' const routes: Routes = [ { path: '', - component: AppMetricsPage, + component: AppPropertiesPage, }, ] @@ -23,6 +23,6 @@ const routes: Routes = [ QRComponentModule, SharingModule, ], - declarations: [AppMetricsPage], + declarations: [AppPropertiesPage], }) -export class AppMetricsPageModule { } +export class AppPropertiesPageModule { } diff --git a/ui/src/app/pages/apps-routes/app-properties/app-properties.page.html b/ui/src/app/pages/apps-routes/app-properties/app-properties.page.html new file mode 100644 index 000000000..53d62db29 --- /dev/null +++ b/ui/src/app/pages/apps-routes/app-properties/app-properties.page.html @@ -0,0 +1,74 @@ + + + + + + Properties + + + + + + + + + + + + + + {{ error }} + + + + + +

Service not running. Information on this page could be inaccurate.

+
+
+ + + + +

No properties.

+
+
+ + + +
+ + + + + + +

{{ prop.key }}

+
+
+ + + + + + +

{{ prop.key }}

+

{{ prop.value.masked && !unmasked[prop.key] ? (prop.value.value | mask ) : (prop.value.value | truncateEnd : 100) }}

+
+
+ + + + + + + + + +
+
+
+
+
+
+
\ No newline at end of file diff --git a/ui/src/app/pages/apps-routes/app-metrics/app-metrics.page.scss b/ui/src/app/pages/apps-routes/app-properties/app-properties.page.scss similarity index 100% rename from ui/src/app/pages/apps-routes/app-metrics/app-metrics.page.scss rename to ui/src/app/pages/apps-routes/app-properties/app-properties.page.scss diff --git a/ui/src/app/pages/apps-routes/app-properties/app-properties.page.ts b/ui/src/app/pages/apps-routes/app-properties/app-properties.page.ts new file mode 100644 index 000000000..5efc1ee9e --- /dev/null +++ b/ui/src/app/pages/apps-routes/app-properties/app-properties.page.ts @@ -0,0 +1,128 @@ +import { Component } from '@angular/core' +import { ActivatedRoute } from '@angular/router' +import { ApiService } from 'src/app/services/api/api.service' +import { isEmptyObject, pauseFor } from 'src/app/util/misc.util' +import { BehaviorSubject, Subject } from 'rxjs' +import { copyToClipboard } from 'src/app/util/web.util' +import { AlertController, NavController, PopoverController, ToastController } from '@ionic/angular' +import { PackageProperties } from 'src/app/util/properties.util' +import { QRComponent } from 'src/app/components/qr/qr.component' +import { PropertyStore } from './property-store' +import { PatchDbModel } from 'src/app/models/patch-db/patch-db-model' +import * as JSONpointer from 'json-pointer' +import { FEStatus } from 'src/app/services/pkg-status-rendering.service' + +@Component({ + selector: 'app-properties', + templateUrl: './app-properties.page.html', + styleUrls: ['./app-properties.page.scss'], +}) +export class AppPropertiesPage { + error = '' + loading = true + pkgId: string + pointer: string + qrCode: string + properties$ = new BehaviorSubject({ }) + hasProperties$ = new BehaviorSubject(null) + unmasked: { [key: string]: boolean } = { } + FeStatus = FEStatus + + constructor ( + private readonly route: ActivatedRoute, + private readonly apiService: ApiService, + private readonly alertCtrl: AlertController, + private readonly toastCtrl: ToastController, + private readonly popoverCtrl: PopoverController, + private readonly propertyStore: PropertyStore, + private readonly navCtrl: NavController, + public patch: PatchDbModel, + ) { } + + ngOnInit () { + this.pkgId = this.route.snapshot.paramMap.get('pkgId') + this.pointer = this.route.queryParams['pointer'] + + this.getProperties().then(() => this.loading = false) + + this.propertyStore.watch$().subscribe(m => { + const properties = JSONpointer.get(m, this.pointer || '') + this.properties$.next(properties) + }) + this.properties$.subscribe(m => { + this.hasProperties$.next(!isEmptyObject(m)) + }) + this.route.queryParams.subscribe(queryParams => { + if (queryParams['pointer'] === this.pointer) return + this.pointer = queryParams['pointer'] + const properties = JSONpointer.get(this.propertyStore.properties$.getValue(), this.pointer || '') + this.properties$.next(properties) + }) + } + + async doRefresh (event: any) { + await this.getProperties(), + event.target.complete() + } + + async presentDescription (property: { key: string, value: PackageProperties[''] }, e: Event) { + e.stopPropagation() + + const alert = await this.alertCtrl.create({ + header: property.key, + message: property.value.description, + }) + await alert.present() + } + + async goToNested (key: string): Promise { + this.navCtrl.navigateForward(`/services/installed/${this.pkgId}/properties`, { + queryParams: { + pointer: `${this.pointer || ''}/${key}/value`, + }, + }) + } + + async copy (text: string): Promise { + let message = '' + await copyToClipboard(text).then(success => { message = success ? 'copied to clipboard!' : 'failed to copy'}) + + const toast = await this.toastCtrl.create({ + header: message, + position: 'bottom', + duration: 1000, + cssClass: 'notification-toast', + }) + await toast.present() + } + + async showQR (text: string, ev: any): Promise { + const popover = await this.popoverCtrl.create({ + component: QRComponent, + cssClass: 'qr-popover', + event: ev, + componentProps: { + text, + }, + }) + return await popover.present() + } + + toggleMask (key: string) { + this.unmasked[key] = !this.unmasked[key] + } + + asIsOrder (a: any, b: any) { + return 0 + } + + private async getProperties (): Promise { + try { + const properties = await this.apiService.getPackageProperties({ id: this.pkgId }) + this.propertyStore.update(properties) + } catch (e) { + console.error(e) + this.error = e.message + } + } +} diff --git a/ui/src/app/pages/apps-routes/app-properties/property-store.ts b/ui/src/app/pages/apps-routes/app-properties/property-store.ts new file mode 100644 index 000000000..e339a48ee --- /dev/null +++ b/ui/src/app/pages/apps-routes/app-properties/property-store.ts @@ -0,0 +1,15 @@ +import { Injectable } from '@angular/core' +import { BehaviorSubject } from 'rxjs' +import { PackageProperties } from '../../../util/properties.util' + +@Injectable({ + providedIn: 'root', +}) +export class PropertyStore { + properties$: BehaviorSubject = new BehaviorSubject({ }) + watch$ () { return this.properties$.asObservable() } + + update (properties: PackageProperties): void { + this.properties$.next(properties) + } +} \ No newline at end of file diff --git a/ui/src/app/pages/apps-routes/app-restore/app-restore.module.ts b/ui/src/app/pages/apps-routes/app-restore/app-restore.module.ts new file mode 100644 index 000000000..3de7bfe19 --- /dev/null +++ b/ui/src/app/pages/apps-routes/app-restore/app-restore.module.ts @@ -0,0 +1,30 @@ +import { NgModule } from '@angular/core' +import { CommonModule } from '@angular/common' +import { IonicModule } from '@ionic/angular' +import { AppRestorePage } from './app-restore.page' +import { RouterModule, Routes } from '@angular/router' +import { PwaBackComponentModule } from 'src/app/components/pwa-back-button/pwa-back.component.module' +import { BackupConfirmationComponentModule } from 'src/app/modals/backup-confirmation/backup-confirmation.component.module' +import { SharingModule } from 'src/app/modules/sharing.module' + +const routes: Routes = [ + { + path: '', + component: AppRestorePage, + }, +] + +@NgModule({ + imports: [ + CommonModule, + IonicModule, + SharingModule, + RouterModule.forChild(routes), + BackupConfirmationComponentModule, + PwaBackComponentModule, + ], + declarations: [ + AppRestorePage, + ], +}) +export class AppRestorePageModule { } \ No newline at end of file diff --git a/ui/src/app/pages/apps-routes/app-restore/app-restore.page.html b/ui/src/app/pages/apps-routes/app-restore/app-restore.page.html new file mode 100644 index 000000000..432fbc699 --- /dev/null +++ b/ui/src/app/pages/apps-routes/app-restore/app-restore.page.html @@ -0,0 +1,64 @@ + + + + + + Restore From Backup + + + + + + + + + + + + {{ error }} + + + + +

About

+

+ Select a location from which to restore {{ pkg.installed.manifest.title }}. This will overwrite all current data. +

+
+
+ + + + + + + No partitions available. Insert the storage device containing the backup you intend to restore. + + + + + + {{ disk.value.size }} + + + {{ disk.key }} + + + + + + + +

{{ partition.value.label || partition.key }} ({{ partition.value.size || 'unknown size' }})

+

Available

+ +

Unavailable

+
+
+
+
+
+
+
+ +
diff --git a/ui/src/app/components/dependency-list/dependency-list.component.scss b/ui/src/app/pages/apps-routes/app-restore/app-restore.page.scss similarity index 100% rename from ui/src/app/components/dependency-list/dependency-list.component.scss rename to ui/src/app/pages/apps-routes/app-restore/app-restore.page.scss diff --git a/ui/src/app/pages/apps-routes/app-restore/app-restore.page.ts b/ui/src/app/pages/apps-routes/app-restore/app-restore.page.ts new file mode 100644 index 000000000..b990b4ebf --- /dev/null +++ b/ui/src/app/pages/apps-routes/app-restore/app-restore.page.ts @@ -0,0 +1,91 @@ +import { Component } from '@angular/core' +import { LoadingController, ModalController } from '@ionic/angular' +import { ApiService } from 'src/app/services/api/api.service' +import { BackupConfirmationComponent } from 'src/app/modals/backup-confirmation/backup-confirmation.component' +import { DiskInfo, PartitionInfoEntry } from 'src/app/services/api/api-types' +import { ActivatedRoute } from '@angular/router' +import { PatchDbModel } from 'src/app/models/patch-db/patch-db-model' + +@Component({ + selector: 'app-restore', + templateUrl: './app-restore.page.html', + styleUrls: ['./app-restore.page.scss'], +}) +export class AppRestorePage { + disks: DiskInfo + pkgId: string + loading = true + error: string + allPartitionsMounted: boolean + + constructor ( + private readonly route: ActivatedRoute, + private readonly modalCtrl: ModalController, + private readonly apiService: ApiService, + private readonly loadingCtrl: LoadingController, + public readonly patch: PatchDbModel, + ) { } + + ngOnInit () { + this.pkgId = this.route.snapshot.paramMap.get('pkgId') + this.getExternalDisks() + } + + async doRefresh () { + this.loading = true + await this.getExternalDisks() + } + + async getExternalDisks (): Promise { + try { + this.disks = await this.apiService.getDisks({ }) + this.allPartitionsMounted = Object.values(this.disks).every(d => Object.values(d.partitions).every(p => p['is-mounted'])) + } catch (e) { + console.error(e) + this.error = e.message + } finally { + this.loading = false + } + } + + async presentModal (logicalname: string, partition: PartitionInfoEntry): Promise { + const m = await this.modalCtrl.create({ + componentProps: { + name: partition.label || logicalname, + }, + cssClass: 'alertlike-modal', + component: BackupConfirmationComponent, + backdropDismiss: false, + }) + + m.onWillDismiss().then(res => { + const data = res.data + if (data.cancel) return + this.restore(logicalname, data.password) + }) + + return await m.present() + } + + private async restore (logicalname: string, password: string): Promise { + this.error = '' + + const loader = await this.loadingCtrl.create({ + spinner: 'lines', + }) + await loader.present() + + try { + await this.apiService.restorePackage({ + id: this.pkgId, + logicalname, + password, + }) + } catch (e) { + console.error(e) + this.error = e.message + } finally { + loader.dismiss() + } + } +} diff --git a/ui/src/app/pages/apps-routes/apps-routing.module.ts b/ui/src/app/pages/apps-routes/apps-routing.module.ts index 0a25bc60a..dbbad4726 100644 --- a/ui/src/app/pages/apps-routes/apps-routing.module.ts +++ b/ui/src/app/pages/apps-routes/apps-routing.module.ts @@ -7,45 +7,53 @@ const routes: Routes = [ redirectTo: 'installed', pathMatch: 'full', }, - { - path: 'marketplace', - loadChildren: () => import('./app-available-list/app-available-list.module').then(m => m.AppAvailableListPageModule), - }, { path: 'installed', loadChildren: () => import('./app-installed-list/app-installed-list.module').then(m => m.AppInstalledListPageModule), }, { - path: 'marketplace/:appId', - loadChildren: () => import('./app-available-show/app-available-show.module').then(m => m.AppAvailableShowPageModule), - }, - { - path: 'installed/:appId', + path: 'installed/:pkgId', loadChildren: () => import('./app-installed-show/app-installed-show.module').then(m => m.AppInstalledShowPageModule), }, { - path: 'installed/:appId/instructions', + path: 'installed/:pkgId/actions', + loadChildren: () => import('./app-actions/app-actions.module').then(m => m.AppActionsPageModule), + }, + { + path: 'installed/:pkgId/config', + loadChildren: () => import('./app-config/app-config.module').then(m => m.AppConfigPageModule), + }, + { + path: 'installed/:pkgId/config/:edit', + loadChildren: () => import('./app-config/app-config.module').then(m => m.AppConfigPageModule), + }, + { + path: 'installed/:pkgId/instructions', loadChildren: () => import('./app-instructions/app-instructions.module').then(m => m.AppInstructionsPageModule), }, { - path: 'installed/:appId/config', - loadChildren: () => import('./app-config/app-config.module').then(m => m.AppConfigPageModule), + path: 'installed/:pkgId/interfaces', + loadChildren: () => import('./app-interfaces/app-interfaces.module').then(m => m.AppInterfacesPageModule), }, { - path: 'installed/:appId/config/:edit', - loadChildren: () => import('./app-config/app-config.module').then(m => m.AppConfigPageModule), - }, - { - path: 'installed/:appId/logs', + path: 'installed/:pkgId/logs', loadChildren: () => import('./app-logs/app-logs.module').then(m => m.AppLogsPageModule), }, { - path: 'installed/:appId/metrics', - loadChildren: () => import('./app-metrics/app-metrics.module').then(m => m.AppMetricsPageModule), + path: 'installed/:pkgId/properties', + loadChildren: () => import('./app-properties/app-properties.module').then(m => m.AppPropertiesPageModule), }, { - path: 'installed/:appId/actions', - loadChildren: () => import('./app-actions/app-actions.module').then(m => m.AppActionsPageModule), + path: 'installed/:pkgId/restore', + loadChildren: () => import('./app-restore/app-restore.module').then(m => m.AppRestorePageModule), + }, + { + path: 'marketplace', + loadChildren: () => import('./app-available-list/app-available-list.module').then(m => m.AppAvailableListPageModule), + }, + { + path: 'marketplace/:pkgId', + loadChildren: () => import('./app-available-show/app-available-show.module').then(m => m.AppAvailableShowPageModule), }, ] diff --git a/ui/src/app/pages/auth-routes/auth-password/auth-password.module.ts b/ui/src/app/pages/auth-routes/auth-password/auth-password.module.ts new file mode 100644 index 000000000..339a23182 --- /dev/null +++ b/ui/src/app/pages/auth-routes/auth-password/auth-password.module.ts @@ -0,0 +1,26 @@ +import { NgModule } from '@angular/core' +import { RouterModule, Routes } from '@angular/router' +import { CommonModule } from '@angular/common' +import { FormsModule } from '@angular/forms' +import { IonicModule } from '@ionic/angular' +import { AuthPasswordPage } from './auth-password.page' +import { SharingModule } from 'src/app/modules/sharing.module' + +const routes: Routes = [ + { + path: '', + component: AuthPasswordPage, + }, +] + +@NgModule({ + imports: [ + CommonModule, + FormsModule, + IonicModule, + RouterModule.forChild(routes), + SharingModule, + ], + declarations: [AuthPasswordPage], +}) +export class AuthPasswordPageModule { } diff --git a/ui/src/app/pages/auth-routes/auth-password/auth-password.page.html b/ui/src/app/pages/auth-routes/auth-password/auth-password.page.html new file mode 100644 index 000000000..059aceae4 --- /dev/null +++ b/ui/src/app/pages/auth-routes/auth-password/auth-password.page.html @@ -0,0 +1,35 @@ + + + + + +
+ + Confirm Nym + + Chuck Tender + + +
+ + + + + + + + + {{ error }} + + + + Login + +
+
+
+
+
+
+
+
\ No newline at end of file diff --git a/ui/src/app/pages/auth-routes/auth-password/auth-password.page.scss b/ui/src/app/pages/auth-routes/auth-password/auth-password.page.scss new file mode 100644 index 000000000..3f4f0de05 --- /dev/null +++ b/ui/src/app/pages/auth-routes/auth-password/auth-password.page.scss @@ -0,0 +1,3 @@ +.sharp-button { + --border-radius: 1px; +} \ No newline at end of file diff --git a/ui/src/app/pages/auth-routes/auth-password/auth-password.page.ts b/ui/src/app/pages/auth-routes/auth-password/auth-password.page.ts new file mode 100644 index 000000000..615603c99 --- /dev/null +++ b/ui/src/app/pages/auth-routes/auth-password/auth-password.page.ts @@ -0,0 +1,41 @@ +import { Component } from '@angular/core' +import { AuthService } from 'src/app/services/auth.service' +import { LoaderService } from 'src/app/services/loader.service' +import { NavController } from '@ionic/angular' + +@Component({ + selector: 'auth-password', + templateUrl: './auth-password.page.html', + styleUrls: ['./auth-password.page.scss'], +}) +export class AuthPasswordPage { + password: string = '' + unmasked = false + error = '' + + constructor ( + private readonly authService: AuthService, + private readonly loader: LoaderService, + private readonly navCtrl: NavController, + ) { } + + ionViewDidEnter () { + this.error = '' + } + + toggleMask () { + this.unmasked = !this.unmasked + } + + async submit () { + try { + await this.loader.displayDuringP( + this.authService.submitPassword(this.password), + ) + this.password = '' + return this.navCtrl.navigateForward(['']) + } catch (e) { + this.error = e.message + } + } +} diff --git a/ui/src/app/pages/auth-routes/auth-pin/auth-pin.module.ts b/ui/src/app/pages/auth-routes/auth-pin/auth-pin.module.ts new file mode 100644 index 000000000..aac49aa22 --- /dev/null +++ b/ui/src/app/pages/auth-routes/auth-pin/auth-pin.module.ts @@ -0,0 +1,26 @@ +import { NgModule } from '@angular/core' +import { RouterModule, Routes } from '@angular/router' +import { CommonModule } from '@angular/common' +import { FormsModule } from '@angular/forms' +import { IonicModule } from '@ionic/angular' +import { AuthPinPage } from './auth-pin.page' +import { SharingModule } from 'src/app/modules/sharing.module' + +const routes: Routes = [ + { + path: '', + component: AuthPinPage, + }, +] + +@NgModule({ + imports: [ + CommonModule, + FormsModule, + IonicModule, + RouterModule.forChild(routes), + SharingModule, + ], + declarations: [AuthPinPage], +}) +export class AuthPinPageModule { } diff --git a/ui/src/app/pages/auth-routes/auth-pin/auth-pin.page.html b/ui/src/app/pages/auth-routes/auth-pin/auth-pin.page.html new file mode 100644 index 000000000..ff39a4714 --- /dev/null +++ b/ui/src/app/pages/auth-routes/auth-pin/auth-pin.page.html @@ -0,0 +1,34 @@ + + + + + +
+ + + + + +
+ + + + + + + + + {{ error }} + + + + Next + +
+
+
+
+
+
+
+
\ No newline at end of file diff --git a/ui/src/app/pages/auth-routes/auth-pin/auth-pin.page.scss b/ui/src/app/pages/auth-routes/auth-pin/auth-pin.page.scss new file mode 100644 index 000000000..3f4f0de05 --- /dev/null +++ b/ui/src/app/pages/auth-routes/auth-pin/auth-pin.page.scss @@ -0,0 +1,3 @@ +.sharp-button { + --border-radius: 1px; +} \ No newline at end of file diff --git a/ui/src/app/pages/auth-routes/auth-pin/auth-pin.page.ts b/ui/src/app/pages/auth-routes/auth-pin/auth-pin.page.ts new file mode 100644 index 000000000..e8aa5491e --- /dev/null +++ b/ui/src/app/pages/auth-routes/auth-pin/auth-pin.page.ts @@ -0,0 +1,41 @@ +import { Component } from '@angular/core' +import { NavController } from '@ionic/angular' +import { AuthService } from 'src/app/services/auth.service' +import { LoaderService } from 'src/app/services/loader.service' + +@Component({ + selector: 'auth-pin', + templateUrl: './auth-pin.page.html', + styleUrls: ['./auth-pin.page.scss'], +}) +export class AuthPinPage { + pin = '' + unmasked = false + error = '' + + constructor ( + private readonly authService: AuthService, + private readonly loader: LoaderService, + private readonly navCtrl: NavController, + ) { } + + ionViewDidEnter () { + this.error = '' + } + + toggleMask () { + this.unmasked = !this.unmasked + } + + async submit () { + try { + await this.loader.displayDuringP( + this.authService.submitPin(this.pin), + ) + this.pin = '' + await this.navCtrl.navigateForward(['/auth/password']) + } catch (e) { + this.error = e.message + } + } +} diff --git a/ui/src/app/pages/auth-routes/auth-routing.module.ts b/ui/src/app/pages/auth-routes/auth-routing.module.ts new file mode 100644 index 000000000..92d0d0089 --- /dev/null +++ b/ui/src/app/pages/auth-routes/auth-routing.module.ts @@ -0,0 +1,24 @@ +import { NgModule } from '@angular/core' +import { Routes, RouterModule } from '@angular/router' + +const routes: Routes = [ + { + path: '', + redirectTo: 'pin', + pathMatch: 'full', + }, + { + path: 'pin', + loadChildren: () => import('./auth-pin/auth-pin.module').then(m => m.AuthPinPageModule), + }, + { + path: 'password', + loadChildren: () => import('./auth-password/auth-password.module').then(m => m.AuthPasswordPageModule), + }, +] + +@NgModule({ + imports: [RouterModule.forChild(routes)], + exports: [RouterModule], +}) +export class AuthRoutingModule { } \ No newline at end of file diff --git a/ui/src/app/pages/authenticate/authenticate-routing.module.ts b/ui/src/app/pages/authenticate/authenticate-routing.module.ts deleted file mode 100644 index eebaff215..000000000 --- a/ui/src/app/pages/authenticate/authenticate-routing.module.ts +++ /dev/null @@ -1,17 +0,0 @@ -import { NgModule } from '@angular/core'; -import { Routes, RouterModule } from '@angular/router'; - -import { AuthenticatePage } from './authenticate.page'; - -const routes: Routes = [ - { - path: '', - component: AuthenticatePage - } -]; - -@NgModule({ - imports: [RouterModule.forChild(routes)], - exports: [RouterModule], -}) -export class AuthenticatePageRoutingModule {} diff --git a/ui/src/app/pages/authenticate/authenticate.module.ts b/ui/src/app/pages/authenticate/authenticate.module.ts deleted file mode 100644 index 12bf60358..000000000 --- a/ui/src/app/pages/authenticate/authenticate.module.ts +++ /dev/null @@ -1,21 +0,0 @@ -import { NgModule } from '@angular/core'; -import { CommonModule } from '@angular/common'; -import { FormsModule } from '@angular/forms'; -import { IonicModule } from '@ionic/angular'; -import { AuthenticatePageRoutingModule } from './authenticate-routing.module'; -import { AuthenticatePage } from './authenticate.page'; -import { PwaBackComponentModule } from 'src/app/components/pwa-back-button/pwa-back.component.module'; -import { BadgeMenuComponentModule } from 'src/app/components/badge-menu-button/badge-menu.component.module'; - -@NgModule({ - imports: [ - CommonModule, - FormsModule, - IonicModule, - AuthenticatePageRoutingModule, - PwaBackComponentModule, - BadgeMenuComponentModule, - ], - declarations: [AuthenticatePage], -}) -export class AuthenticatePageModule { } diff --git a/ui/src/app/pages/authenticate/authenticate.page.html b/ui/src/app/pages/authenticate/authenticate.page.html deleted file mode 100644 index cdadc1a04..000000000 --- a/ui/src/app/pages/authenticate/authenticate.page.html +++ /dev/null @@ -1,27 +0,0 @@ - - - Login - - - - - - - -
- - - - - - - - - {{ e }} - - - - Login - -
-
\ No newline at end of file diff --git a/ui/src/app/pages/authenticate/authenticate.page.ts b/ui/src/app/pages/authenticate/authenticate.page.ts deleted file mode 100644 index 7e9ec6123..000000000 --- a/ui/src/app/pages/authenticate/authenticate.page.ts +++ /dev/null @@ -1,44 +0,0 @@ -import { Component, OnInit } from '@angular/core' -import { AuthService } from '../../services/auth.service' -import { LoaderService } from '../../services/loader.service' -import { BehaviorSubject } from 'rxjs' -import { Router } from '@angular/router' - -@Component({ - selector: 'app-authenticate', - templateUrl: './authenticate.page.html', - styleUrls: ['./authenticate.page.scss'], -}) -export class AuthenticatePage implements OnInit { - password: string = '' - unmasked = false - $error$ = new BehaviorSubject(undefined) - - constructor ( - private readonly authStore: AuthService, - private readonly loader: LoaderService, - private readonly router: Router, - ) { } - - ngOnInit () { } - - ionViewDidEnter () { - this.$error$.next(undefined) - } - - toggleMask () { - this.unmasked = !this.unmasked - } - - async submitPassword () { - try { - await this.loader.displayDuringP( - this.authStore.login(this.password), - ) - this.password = '' - return this.router.navigate(['']) - } catch (e) { - this.$error$.next(e.message) - } - } -} diff --git a/ui/src/app/pages/maintenance/maintenance.module.ts b/ui/src/app/pages/maintenance/maintenance.module.ts new file mode 100644 index 000000000..5caac9549 --- /dev/null +++ b/ui/src/app/pages/maintenance/maintenance.module.ts @@ -0,0 +1,24 @@ +import { NgModule } from '@angular/core' +import { CommonModule } from '@angular/common' +import { IonicModule } from '@ionic/angular' +import { RouterModule, Routes } from '@angular/router' +import { MaintenancePage } from './maintenance.page' +import { SharingModule } from 'src/app/modules/sharing.module' + +const routes: Routes = [ + { + path: '', + component: MaintenancePage, + }, +] + +@NgModule({ + imports: [ + CommonModule, + IonicModule, + RouterModule.forChild(routes), + SharingModule, + ], + declarations: [MaintenancePage], +}) +export class MaintenancePageModule { } diff --git a/ui/src/app/pages/maintenance/maintenance.page.html b/ui/src/app/pages/maintenance/maintenance.page.html new file mode 100644 index 000000000..f7a895e88 --- /dev/null +++ b/ui/src/app/pages/maintenance/maintenance.page.html @@ -0,0 +1,13 @@ + + + + + + +

Updating Embassy

+

Embassy is backing up

+
+
+
+ +
\ No newline at end of file diff --git a/ui/src/app/pages/authenticate/authenticate.page.scss b/ui/src/app/pages/maintenance/maintenance.page.scss similarity index 100% rename from ui/src/app/pages/authenticate/authenticate.page.scss rename to ui/src/app/pages/maintenance/maintenance.page.scss diff --git a/ui/src/app/pages/maintenance/maintenance.page.ts b/ui/src/app/pages/maintenance/maintenance.page.ts new file mode 100644 index 000000000..3726e3e4b --- /dev/null +++ b/ui/src/app/pages/maintenance/maintenance.page.ts @@ -0,0 +1,17 @@ +import { Component } from '@angular/core' +import { ServerStatus } from 'src/app/models/patch-db/data-model' +import { PatchDbModel } from 'src/app/models/patch-db/patch-db-model' + +@Component({ + selector: 'Maintenance', + templateUrl: 'Maintenance.page.html', + styleUrls: ['Maintenance.page.scss'], +}) +export class MaintenancePage { + ServerStatus = ServerStatus + + constructor ( + public readonly patch: PatchDbModel, + ) { } +} + diff --git a/ui/src/app/pages/notifications/notifications.module.ts b/ui/src/app/pages/notifications/notifications.module.ts index 79251f051..7cbcf5c40 100644 --- a/ui/src/app/pages/notifications/notifications.module.ts +++ b/ui/src/app/pages/notifications/notifications.module.ts @@ -5,6 +5,7 @@ import { RouterModule, Routes } from '@angular/router' import { NotificationsPage } from './notifications.page' import { PwaBackComponentModule } from 'src/app/components/pwa-back-button/pwa-back.component.module' import { BadgeMenuComponentModule } from 'src/app/components/badge-menu-button/badge-menu.component.module' +import { SharingModule } from 'src/app/modules/sharing.module' const routes: Routes = [ { @@ -20,6 +21,7 @@ const routes: Routes = [ RouterModule.forChild(routes), PwaBackComponentModule, BadgeMenuComponentModule, + SharingModule, ], declarations: [NotificationsPage], }) diff --git a/ui/src/app/pages/notifications/notifications.page.html b/ui/src/app/pages/notifications/notifications.page.html index e4db38192..b22b5500c 100644 --- a/ui/src/app/pages/notifications/notifications.page.html +++ b/ui/src/app/pages/notifications/notifications.page.html @@ -36,15 +36,19 @@

- {{ not.title }} + {{ not.title }} +

+

+ {{ not.message }} + + View Report +

-

{{ not.message }}

-

{{ not.createdAt | date: 'short' }}

- {{ not.appId }} - - - Code: {{ not.code }} + {{ not['created-at'] | date: 'short' }} + + - {{ not['package-id'] }} +

diff --git a/ui/src/app/pages/notifications/notifications.page.ts b/ui/src/app/pages/notifications/notifications.page.ts index 43a534e3c..ddd5e6f4c 100644 --- a/ui/src/app/pages/notifications/notifications.page.ts +++ b/ui/src/app/pages/notifications/notifications.page.ts @@ -1,8 +1,9 @@ import { Component } from '@angular/core' -import { ServerModel, S9Notification } from 'src/app/models/server-model' import { ApiService } from 'src/app/services/api/api.service' -import { pauseFor } from 'src/app/util/misc.util' import { LoaderService } from 'src/app/services/loader.service' +import { ServerNotification, ServerNotifications } from 'src/app/services/api/api-types' +import { AlertController } from '@ionic/angular' + @Component({ selector: 'notifications', templateUrl: 'notifications.page.html', @@ -11,33 +12,25 @@ import { LoaderService } from 'src/app/services/loader.service' export class NotificationsPage { error = '' loading = true - notifications: S9Notification[] = [] + notifications: ServerNotifications = [] page = 1 needInfinite = false readonly perPage = 20 constructor ( - private readonly serverModel: ServerModel, private readonly apiService: ApiService, private readonly loader: LoaderService, + private readonly alertCtrl: AlertController, ) { } async ngOnInit () { - const [notifications] = await Promise.all([ - this.getNotifications(), - pauseFor(600), - ]) - this.notifications = notifications - this.serverModel.update({ badge: 0 }) + this.notifications = await this.getNotifications() this.loading = false } async doRefresh (e: any) { this.page = 1 - await Promise.all([ - this.getNotifications(), - pauseFor(600), - ]) + this.notifications = await this.getNotifications(), e.target.complete() } @@ -47,10 +40,10 @@ export class NotificationsPage { e.target.complete() } - async getNotifications (): Promise { - let notifications: S9Notification[] = [] + async getNotifications (): Promise { + let notifications: ServerNotifications = [] try { - notifications = await this.apiService.getNotifications(this.page, this.perPage) + notifications = await this.apiService.getNotifications({ page: this.page, 'per-page': this.perPage }) this.needInfinite = notifications.length >= this.perPage this.page++ this.error = '' @@ -62,29 +55,13 @@ export class NotificationsPage { } } - getColor (notification: S9Notification): string { - const char = notification.code.charAt(0) - switch (char) { - case '0': - return 'primary' - case '1': - return 'success' - case '2': - return 'warning' - case '3': - return 'danger' - default: - return '' - } - } - - async remove (notificationId: string, index: number): Promise { + async remove (id: string, index: number): Promise { this.loader.of({ message: 'Deleting...', spinner: 'lines', cssClass: 'loader', }).displayDuringP( - this.apiService.deleteNotification(notificationId).then(() => { + this.apiService.deleteNotification({ id }).then(() => { this.notifications.splice(index, 1) this.error = '' }), @@ -93,5 +70,45 @@ export class NotificationsPage { this.error = e.message }) } + + async viewBackupReport (notification: ServerNotification<1>) { + const data = notification.data + + const embassyFailed = !!data.server.error + const packagesFailed = Object.entries(data.packages).some(([_, val]) => val.error) + + let message: string + + if (embassyFailed || packagesFailed) { + message = 'There was an issue backing up one or more items. Click "Retry" to retry ONLY the items that failed.' + } else { + message = 'All items were successfully backed up' + } + + const buttons: any[] = [ // why can't I import AlertButton? + { + text: 'Dismiss', + role: 'cancel', + }, + ] + + if (embassyFailed || packagesFailed) { + buttons.push({ + text: 'Retry', + handler: () => { + console.log('retry backup') + }, + }) + } + + + const alert = await this.alertCtrl.create({ + header: 'Backup Report', + message, + buttons, + }) + + await alert.present() + } } diff --git a/ui/src/app/pages/server-routes/developer-routes/dev-options/dev-options.module.ts b/ui/src/app/pages/server-routes/developer-routes/dev-options/dev-options.module.ts index db5c95d28..d6fd5b306 100644 --- a/ui/src/app/pages/server-routes/developer-routes/dev-options/dev-options.module.ts +++ b/ui/src/app/pages/server-routes/developer-routes/dev-options/dev-options.module.ts @@ -5,6 +5,7 @@ import { DevOptionsPage } from './dev-options.page' import { Routes, RouterModule } from '@angular/router' import { PwaBackComponentModule } from 'src/app/components/pwa-back-button/pwa-back.component.module' import { ObjectConfigComponentModule } from 'src/app/components/object-config/object-config.component.module' +import { SharingModule } from 'src/app/modules/sharing.module' const routes: Routes = [ { @@ -20,7 +21,10 @@ const routes: Routes = [ ObjectConfigComponentModule, RouterModule.forChild(routes), PwaBackComponentModule, + SharingModule, + ], + declarations: [ + DevOptionsPage, ], - declarations: [DevOptionsPage], }) export class DevOptionsPageModule { } diff --git a/ui/src/app/pages/server-routes/developer-routes/dev-options/dev-options.page.html b/ui/src/app/pages/server-routes/developer-routes/dev-options/dev-options.page.html index 4f0c04e90..20e470c43 100644 --- a/ui/src/app/pages/server-routes/developer-routes/dev-options/dev-options.page.html +++ b/ui/src/app/pages/server-routes/developer-routes/dev-options/dev-options.page.html @@ -9,18 +9,14 @@ - - - - - - + + SSH Keys - + + Marketplace URL + {{ server.registry }} + \ No newline at end of file diff --git a/ui/src/app/pages/server-routes/developer-routes/dev-options/dev-options.page.ts b/ui/src/app/pages/server-routes/developer-routes/dev-options/dev-options.page.ts index 39ae0287b..69f9e6299 100644 --- a/ui/src/app/pages/server-routes/developer-routes/dev-options/dev-options.page.ts +++ b/ui/src/app/pages/server-routes/developer-routes/dev-options/dev-options.page.ts @@ -1,11 +1,6 @@ import { Component } from '@angular/core' -import { PropertySubject } from 'src/app/util/property-subject.util' -import { S9Server } from 'src/app/models/server-model' import { ServerConfigService } from 'src/app/services/server-config.service' -import { ApiService } from 'src/app/services/api/api.service' -import { pauseFor } from 'src/app/util/misc.util' -import { LoaderService } from 'src/app/services/loader.service' -import { ModelPreload } from 'src/app/models/model-preload' +import { PatchDbModel } from 'src/app/models/patch-db/patch-db-model' @Component({ selector: 'dev-options', @@ -13,30 +8,13 @@ import { ModelPreload } from 'src/app/models/model-preload' styleUrls: ['./dev-options.page.scss'], }) export class DevOptionsPage { - server: PropertySubject = { } as any constructor ( private readonly serverConfigService: ServerConfigService, - private readonly apiService: ApiService, - private readonly loader: LoaderService, - private readonly preload: ModelPreload, + public readonly patch: PatchDbModel, ) { } - ngOnInit () { - this.loader.displayDuring$( - this.preload.server(), - ).subscribe(s => this.server = s) - } - - async doRefresh (event: any) { - await Promise.all([ - this.apiService.getServer(), - pauseFor(600), - ]) - event.target.complete() - } - - async presentModalValueEdit (key: string): Promise { - await this.serverConfigService.presentModalValueEdit(key) + async presentModalValueEdit (key: string, current?: any): Promise { + await this.serverConfigService.presentModalValueEdit(key, current) } } diff --git a/ui/src/app/pages/server-routes/developer-routes/dev-ssh-keys/dev-ssh-keys.module.ts b/ui/src/app/pages/server-routes/developer-routes/dev-ssh-keys/dev-ssh-keys.module.ts index c576f1721..c5602b137 100644 --- a/ui/src/app/pages/server-routes/developer-routes/dev-ssh-keys/dev-ssh-keys.module.ts +++ b/ui/src/app/pages/server-routes/developer-routes/dev-ssh-keys/dev-ssh-keys.module.ts @@ -4,6 +4,7 @@ import { IonicModule } from '@ionic/angular' import { RouterModule, Routes } from '@angular/router' import { DevSSHKeysPage } from './dev-ssh-keys.page' import { PwaBackComponentModule } from 'src/app/components/pwa-back-button/pwa-back.component.module' +import { SharingModule } from 'src/app/modules/sharing.module' const routes: Routes = [ { @@ -18,6 +19,7 @@ const routes: Routes = [ IonicModule, RouterModule.forChild(routes), PwaBackComponentModule, + SharingModule, ], declarations: [DevSSHKeysPage], }) diff --git a/ui/src/app/pages/server-routes/developer-routes/dev-ssh-keys/dev-ssh-keys.page.html b/ui/src/app/pages/server-routes/developer-routes/dev-ssh-keys/dev-ssh-keys.page.html index 2a67b3d0f..98a44c7b7 100644 --- a/ui/src/app/pages/server-routes/developer-routes/dev-ssh-keys/dev-ssh-keys.page.html +++ b/ui/src/app/pages/server-routes/developer-routes/dev-ssh-keys/dev-ssh-keys.page.html @@ -8,22 +8,19 @@ - - - - - - + {{ error }} + + Saved Keys - + - {{ fingerprint.alg }} {{ fingerprint.hash }} {{ fingerprint.hostname }} + {{ ssh.value.alg }} {{ ssh.key }} {{ ssh.value.hostname }} - + diff --git a/ui/src/app/pages/server-routes/developer-routes/dev-ssh-keys/dev-ssh-keys.page.ts b/ui/src/app/pages/server-routes/developer-routes/dev-ssh-keys/dev-ssh-keys.page.ts index 68791fff0..ac8a29f54 100644 --- a/ui/src/app/pages/server-routes/developer-routes/dev-ssh-keys/dev-ssh-keys.page.ts +++ b/ui/src/app/pages/server-routes/developer-routes/dev-ssh-keys/dev-ssh-keys.page.ts @@ -1,12 +1,8 @@ import { Component } from '@angular/core' -import { SSHFingerprint, S9Server } from 'src/app/models/server-model' -import { ApiService } from 'src/app/services/api/api.service' -import { pauseFor } from 'src/app/util/misc.util' -import { PropertySubject } from 'src/app/util/property-subject.util' import { ServerConfigService } from 'src/app/services/server-config.service' -import { LoaderService } from 'src/app/services/loader.service' -import { ModelPreload } from 'src/app/models/model-preload' import { AlertController } from '@ionic/angular' +import { LoaderService } from 'src/app/services/loader.service' +import { SSHService } from './ssh.service' @Component({ selector: 'dev-ssh-keys', @@ -14,40 +10,31 @@ import { AlertController } from '@ionic/angular' styleUrls: ['dev-ssh-keys.page.scss'], }) export class DevSSHKeysPage { - server: PropertySubject = { } as any error = '' + loading = true constructor ( - private readonly apiService: ApiService, private readonly loader: LoaderService, - private readonly preload: ModelPreload, private readonly serverConfigService: ServerConfigService, private readonly alertCtrl: AlertController, + public readonly sshService: SSHService, ) { } ngOnInit () { - this.loader.displayDuring$( - this.preload.server(), - ).subscribe(s => this.server = s) - } - - async doRefresh (event: any) { - await Promise.all([ - this.apiService.getServer(), - pauseFor(600), - ]) - event.target.complete() + this.sshService.getKeys().then(() => { + this.loading = false + }) } async presentModalAdd () { - await this.serverConfigService.presentModalValueEdit('ssh', true) + await this.serverConfigService.presentModalValueEdit('ssh') } - async presentAlertDelete (fingerprint: SSHFingerprint) { + async presentAlertDelete (hash: string) { const alert = await this.alertCtrl.create({ backdropDismiss: false, header: 'Caution', - message: `Are you sure you want to delete this SSH key?`, + message: `Are you sure you want to delete this key?`, buttons: [ { text: 'Cancel', @@ -57,7 +44,7 @@ export class DevSSHKeysPage { text: 'Delete', cssClass: 'alert-danger', handler: () => { - this.delete(fingerprint) + this.delete(hash) }, }, ], @@ -65,16 +52,21 @@ export class DevSSHKeysPage { await alert.present() } - async delete (fingerprint: SSHFingerprint) { + async delete (hash: string): Promise { + this.error = '' this.loader.of({ message: 'Deleting...', spinner: 'lines', cssClass: 'loader', - }).displayDuringP( - this.apiService.deleteSSHKey(fingerprint).then(() => this.error = ''), - ).catch(e => { + }).displayDuringAsync(async () => { + await this.sshService.delete(hash) + }).catch(e => { console.error(e) - this.error = e.message + this.error = '' }) } + + asIsOrder (a: any, b: any) { + return 0 + } } diff --git a/ui/src/app/pages/server-routes/developer-routes/dev-ssh-keys/ssh.service.ts b/ui/src/app/pages/server-routes/developer-routes/dev-ssh-keys/ssh.service.ts new file mode 100644 index 000000000..50fd6d949 --- /dev/null +++ b/ui/src/app/pages/server-routes/developer-routes/dev-ssh-keys/ssh.service.ts @@ -0,0 +1,43 @@ +import { Injectable } from '@angular/core' +import { BehaviorSubject } from 'rxjs' +import { SSHKeys } from 'src/app/services/api/api-types' +import { ApiService } from 'src/app/services/api/api.service' + +@Injectable({ + providedIn: 'root', +}) +export class SSHService { + private readonly keys$ = new BehaviorSubject({ }) + + constructor ( + private readonly apiService: ApiService, + ) { } + + watch$ () { + return this.keys$.asObservable() + } + + async getKeys (): Promise { + const keys = await this.apiService.getSshKeys({ }) + this.keys$.next(keys) + } + + async add (pubkey: string): Promise { + const key = await this.apiService.addSshKey({ pubkey }) + const keys = this.keys$.getValue() + this.keys$.next({ ...keys, ...key }) + } + + async delete (hash: string): Promise { + await this.apiService.deleteSshKey({ hash }) + const keys = this.keys$.getValue() + + const filtered = Object.keys(keys) + .filter(h => h !== hash) + .reduce((res, h) => { + res[h] = keys[h] + return res + }, { }) + this.keys$.next(filtered) + } +} diff --git a/ui/src/app/pages/server-routes/external-drives/external-drives.page.html b/ui/src/app/pages/server-routes/external-drives/external-drives.page.html deleted file mode 100644 index 48eff6aaa..000000000 --- a/ui/src/app/pages/server-routes/external-drives/external-drives.page.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - Backup drives - - - - - - - - - - - - {{d.logicalname}} ({{ d.size }}) - - - - - - - - - - - diff --git a/ui/src/app/pages/server-routes/external-drives/external-drives.page.ts b/ui/src/app/pages/server-routes/external-drives/external-drives.page.ts deleted file mode 100644 index d21611f9a..000000000 --- a/ui/src/app/pages/server-routes/external-drives/external-drives.page.ts +++ /dev/null @@ -1,65 +0,0 @@ -import { Component } from '@angular/core' -import { pauseFor } from 'src/app/util/misc.util' -import { ApiService } from 'src/app/services/api/api.service' -import { DiskInfo } from 'src/app/models/server-model' -import { markAsLoadingDuringP } from 'src/app/services/loader.service' -import { BehaviorSubject } from 'rxjs' -import { AlertController } from '@ionic/angular' -// TODO: EJECT-DISKS - -type Ejectable = T & { $ejecting$: BehaviorSubject } - -@Component({ - selector: 'external-drives', - templateUrl: './external-drives.page.html', - styleUrls: ['./external-drives.page.scss'], -}) -export class ExternalDrivesPage { - disks: Ejectable[] = [] - $loading$ = new BehaviorSubject(false) - - constructor ( - private readonly apiService: ApiService, - private readonly alertCtrl: AlertController, - ) { } - - ngOnInit () { - markAsLoadingDuringP(this.$loading$, this.fetchDisks()) - } - - async doRefresh (event: any) { - await Promise.all([ - this.fetchDisks(), - pauseFor(600), - ]) - event.target.complete() - } - - async fetchDisks () { - return this.apiService.getExternalDisks().then(ds => { - this.disks = ds - .filter(d => !!d.partitions.find(p => !p.isMounted)) - .map(d => ({ ...d, $ejecting$: new BehaviorSubject(false)})) - .sort( (a, b) => a.logicalname < b.logicalname ? -1 : 1 ) - }) - } - - async ejectDisk (diskIndex: number) { - const d = this.disks[diskIndex] - markAsLoadingDuringP(d.$ejecting$, this.apiService.ejectExternalDisk(d.logicalname)) - .then(() => this.disks.splice(diskIndex, 1)) - .catch((e: Error) => { - this.alertError(`Could not eject ${d.logicalname}: ${e.message}`) - }) - } - - async alertError (desc: string) { - const alert = await this.alertCtrl.create({ - backdropDismiss: true, - message: desc, - cssClass: 'alert-error-message', - }) - await alert.present() - } -} - diff --git a/ui/src/app/pages/server-routes/external-drives/external-drives.module.ts b/ui/src/app/pages/server-routes/general-settings/general-settings.module.ts similarity index 62% rename from ui/src/app/pages/server-routes/external-drives/external-drives.module.ts rename to ui/src/app/pages/server-routes/general-settings/general-settings.module.ts index c1e0f22a2..a77b0538e 100644 --- a/ui/src/app/pages/server-routes/external-drives/external-drives.module.ts +++ b/ui/src/app/pages/server-routes/general-settings/general-settings.module.ts @@ -1,17 +1,15 @@ import { NgModule } from '@angular/core' import { CommonModule } from '@angular/common' import { IonicModule } from '@ionic/angular' -import { ExternalDrivesPage } from './external-drives.page' +import { GeneralSettingsPage } from './general-settings.page' import { Routes, RouterModule } from '@angular/router' import { SharingModule } from 'src/app/modules/sharing.module' import { PwaBackComponentModule } from 'src/app/components/pwa-back-button/pwa-back.component.module' -import { ObjectConfigComponentModule } from 'src/app/components/object-config/object-config.component.module' -// TODO: EJECT-DISKS const routes: Routes = [ { path: '', - component: ExternalDrivesPage, + component: GeneralSettingsPage, }, ] @@ -20,10 +18,11 @@ const routes: Routes = [ CommonModule, IonicModule, SharingModule, - ObjectConfigComponentModule, RouterModule.forChild(routes), PwaBackComponentModule, ], - declarations: [ExternalDrivesPage], + declarations: [ + GeneralSettingsPage, + ], }) -export class ExternalDrivesPageModule { } +export class GeneralSettingsPageModule { } diff --git a/ui/src/app/pages/server-routes/server-config/server-config.page.html b/ui/src/app/pages/server-routes/general-settings/general-settings.page.html similarity index 50% rename from ui/src/app/pages/server-routes/server-config/server-config.page.html rename to ui/src/app/pages/server-routes/general-settings/general-settings.page.html index c22f93219..93fd8c773 100644 --- a/ui/src/app/pages/server-routes/server-config/server-config.page.html +++ b/ui/src/app/pages/server-routes/general-settings/general-settings.page.html @@ -3,25 +3,22 @@ - Config + General Settings - - - - - - Device Name - {{ server.name | async }} + + + Embassy Name + {{ ui['server-name'] }} - + Auto Check for Updates - {{ server.autoCheckUpdates | async }} + {{ ui['auto-check-updates'] }} - diff --git a/ui/src/app/pages/server-routes/external-drives/external-drives.page.scss b/ui/src/app/pages/server-routes/general-settings/general-settings.page.scss similarity index 100% rename from ui/src/app/pages/server-routes/external-drives/external-drives.page.scss rename to ui/src/app/pages/server-routes/general-settings/general-settings.page.scss diff --git a/ui/src/app/pages/server-routes/general-settings/general-settings.page.ts b/ui/src/app/pages/server-routes/general-settings/general-settings.page.ts new file mode 100644 index 000000000..5f8077617 --- /dev/null +++ b/ui/src/app/pages/server-routes/general-settings/general-settings.page.ts @@ -0,0 +1,19 @@ +import { Component } from '@angular/core' +import { ServerConfigService } from 'src/app/services/server-config.service' +import { PatchDbModel } from 'src/app/models/patch-db/patch-db-model' + +@Component({ + selector: 'general-settings', + templateUrl: './general-settings.page.html', + styleUrls: ['./general-settings.page.scss'], +}) +export class GeneralSettingsPage { + constructor ( + private readonly serverConfigService: ServerConfigService, + public readonly patch: PatchDbModel, + ) { } + + async presentModalValueEdit (key: string, current?: string): Promise { + await this.serverConfigService.presentModalValueEdit(key, current) + } +} diff --git a/ui/src/app/pages/server-routes/lan/lan.page.html b/ui/src/app/pages/server-routes/lan/lan.page.html index 328decedf..0d34a989b 100644 --- a/ui/src/app/pages/server-routes/lan/lan.page.html +++ b/ui/src/app/pages/server-routes/lan/lan.page.html @@ -10,26 +10,33 @@ - + + - You can connect to your Embassy over your Local Area Network (LAN). This can be useful for achieving a faster experience, as well as a fallback in case the Tor network is experiencing issues. - - - - - - +

About

+

You can connect to your Embassy over your Local Area Network (LAN). This can be useful for achieving a faster experience, as well as a fallback in case the Tor network is experiencing issues.

- View Instructions + View Instructions + + + + +

Setup

+ +
+
+
+ + - - If you are having issues connecting to your Embassy or services over LAN, you can try refreshing the network by clicking the button below. +

Troubleshooting

+

If you are having issues connecting to your Embassy over LAN, try refreshing the network by clicking the button below.

@@ -39,10 +46,10 @@
+ + + - - Certificate and Address -

Root Certificate Authority

@@ -52,20 +59,21 @@
- +

LAN Address

-

{{ lanAddress }}

+

https://{{ patch.watch$('server-info', 'lan-address') | ngrxPush }}

+
- +
\ No newline at end of file diff --git a/ui/src/app/pages/server-routes/lan/lan.page.ts b/ui/src/app/pages/server-routes/lan/lan.page.ts index 37561bf19..3f5c23b75 100644 --- a/ui/src/app/pages/server-routes/lan/lan.page.ts +++ b/ui/src/app/pages/server-routes/lan/lan.page.ts @@ -1,10 +1,10 @@ import { Component } from '@angular/core' import { isPlatform, ToastController } from '@ionic/angular' -import { ServerModel } from 'src/app/models/server-model' import { copyToClipboard } from 'src/app/util/web.util' import { ConfigService } from 'src/app/services/config.service' import { LoaderService } from 'src/app/services/loader.service' import { ApiService } from 'src/app/services/api/api.service' +import { PatchDbModel } from 'src/app/models/patch-db/patch-db-model' @Component({ selector: 'lan', @@ -12,40 +12,28 @@ import { ApiService } from 'src/app/services/api/api.service' styleUrls: ['./lan.page.scss'], }) export class LANPage { - torDocs = 'docs.privacy34kn4ez3y3nijweec6w4g54i3g54sdv7r5mr6soma3w4begyd.onion/user-manual/general/lan-setup' - lanDocs = 'docs.start9labs.com/user-manual/general/lan-setup' - lanAddress: string - fullDocumentationLink: string lanDisabled: LanSetupIssue readonly lanDisabledExplanation: { [k in LanSetupIssue]: string } = { - NotDesktop: `We have detected you are on a mobile device. To setup LAN on a mobile device, use the Start9 Setup App.`, - NotTor: `We have detected you are not using a Tor connection. For security reasons, you must setup LAN over a Tor connection. Please navigate to your Embassy Tor Address and try again.`, + NotDesktop: `You are using a mobile device. To setup LAN on a mobile device, please use the Start9 Setup App.`, + NotTor: `For security reasons, you must setup LAN over a Tor connection. Please navigate to your Embassy Tor Address and try again.`, } + readonly docsUrl = 'https://docs.start9.com/user-manual/general/lan-setup' constructor ( - private readonly serverModel: ServerModel, private readonly toastCtrl: ToastController, private readonly config: ConfigService, private readonly loader: LoaderService, private readonly apiService: ApiService, + public readonly patch: PatchDbModel, ) { } ngOnInit () { if (isPlatform('ios') || isPlatform('android')) { - this.lanDisabled = 'NotDesktop' + this.lanDisabled = LanSetupIssue.NOT_DESKTOP } else if (!this.config.isTor()) { - this.lanDisabled = 'NotTor' + this.lanDisabled = LanSetupIssue.NOT_TOR } - - if (this.config.isTor()) { - this.fullDocumentationLink = `http://${this.torDocs}` - } else { - this.fullDocumentationLink = `https://${this.lanDocs}` - } - - const server = this.serverModel.peek() - this.lanAddress = `https://${server.serverId}.local` } async refreshLAN (): Promise { @@ -54,20 +42,12 @@ export class LANPage { spinner: 'lines', cssClass: 'loader', }).displayDuringAsync( async () => { - await this.apiService.refreshLAN() + await this.apiService.refreshLan({ }) }).catch(e => { console.error(e) }) } - viewInstructions (): void { - if (this.config.isConsulate) { - this.copyInstructions() - } else { - window.open(this.fullDocumentationLink, '_blank') - } - } - async copyLAN (): Promise { const message = await copyToClipboard(this.lanAddress).then(success => success ? 'copied to clipboard!' : 'failed to copy') @@ -80,23 +60,12 @@ export class LANPage { await toast.present() } - async copyInstructions (): Promise < void > { - const message = await copyToClipboard(this.fullDocumentationLink).then( - success => success ? 'copied link to clipboard!' : 'failed to copy', - ) - - const toast = await this.toastCtrl.create({ - header: message, - position: 'bottom', - duration: 1000, - cssClass: 'notification-toast', - }) - await toast.present() - } - installCert (): void { document.getElementById('install-cert').click() } } -type LanSetupIssue = 'NotTor' | 'NotDesktop' +enum LanSetupIssue { + NOT_TOR = 'NotTor', + NOT_DESKTOP = 'NotDesktop', +} diff --git a/ui/src/app/pages/server-routes/server-backup/server-backup.module.ts b/ui/src/app/pages/server-routes/server-backup/server-backup.module.ts new file mode 100644 index 000000000..5d7a5efc1 --- /dev/null +++ b/ui/src/app/pages/server-routes/server-backup/server-backup.module.ts @@ -0,0 +1,28 @@ +import { NgModule } from '@angular/core' +import { CommonModule } from '@angular/common' +import { IonicModule } from '@ionic/angular' +import { ServerBackupPage } from './server-backup.page' +import { RouterModule, Routes } from '@angular/router' +import { BackupConfirmationComponentModule } from 'src/app/modals/backup-confirmation/backup-confirmation.component.module' +import { PwaBackComponentModule } from 'src/app/components/pwa-back-button/pwa-back.component.module' + +const routes: Routes = [ + { + path: '', + component: ServerBackupPage, + }, +] + +@NgModule({ + imports: [ + CommonModule, + IonicModule, + RouterModule.forChild(routes), + BackupConfirmationComponentModule, + PwaBackComponentModule, + ], + declarations: [ + ServerBackupPage, + ], +}) +export class ServerBackupPageModule { } \ No newline at end of file diff --git a/ui/src/app/pages/server-routes/server-backup/server-backup.page.html b/ui/src/app/pages/server-routes/server-backup/server-backup.page.html new file mode 100644 index 000000000..ca1522764 --- /dev/null +++ b/ui/src/app/pages/server-routes/server-backup/server-backup.page.html @@ -0,0 +1,69 @@ + + + + + + Create Backup + + + + + + + + + + + + {{ error }} + + + + +

About

+

+ Select a location to back up your Embassy. Because are diff-based, so your first backup will likely take much longer than subsequent backups. +

+
+

+ During backup, your Embassy will be unusable. +

+
+
+ + + + + + + No partitions available. To begin a backup, insert a storage device into your Embassy. + No partitions available. Insert the storage device containing the backup you wish to restore. + + + + + + {{ disk.value.size }} + + + {{ disk.key }} + + + + + + + +

{{ partition.value.label || partition.key }} ({{ partition.value.size || 'unknown size' }})

+

Available

+ +

Unavailable

+
+
+
+
+
+
+
+ +
diff --git a/ui/src/app/pages/server-routes/server-config/server-config.page.scss b/ui/src/app/pages/server-routes/server-backup/server-backup.page.scss similarity index 100% rename from ui/src/app/pages/server-routes/server-config/server-config.page.scss rename to ui/src/app/pages/server-routes/server-backup/server-backup.page.scss diff --git a/ui/src/app/pages/server-routes/server-backup/server-backup.page.ts b/ui/src/app/pages/server-routes/server-backup/server-backup.page.ts new file mode 100644 index 000000000..9bf279df9 --- /dev/null +++ b/ui/src/app/pages/server-routes/server-backup/server-backup.page.ts @@ -0,0 +1,81 @@ +import { Component } from '@angular/core' +import { LoadingController, ModalController } from '@ionic/angular' +import { ApiService } from 'src/app/services/api/api.service' +import { BackupConfirmationComponent } from 'src/app/modals/backup-confirmation/backup-confirmation.component' +import { DiskInfo, PartitionInfoEntry } from 'src/app/services/api/api-types' + +@Component({ + selector: 'server-backup', + templateUrl: './server-backup.page.html', + styleUrls: ['./server-backup.page.scss'], +}) +export class ServerBackupPage { + disks: DiskInfo + loading = true + error: string + allPartitionsMounted: boolean + + constructor ( + private readonly modalCtrl: ModalController, + private readonly apiService: ApiService, + private readonly loadingCtrl: LoadingController, + ) { } + + ngOnInit () { + this.getExternalDisks() + } + + async doRefresh () { + this.loading = true + await this.getExternalDisks() + } + + async getExternalDisks (): Promise { + try { + this.disks = await this.apiService.getDisks({ }) + this.allPartitionsMounted = Object.values(this.disks).every(d => Object.values(d.partitions).every(p => p['is-mounted'])) + } catch (e) { + console.error(e) + this.error = e.message + } finally { + this.loading = false + } + } + + async presentModal (logicalname: string, partition: PartitionInfoEntry): Promise { + const m = await this.modalCtrl.create({ + componentProps: { + name: partition.label || logicalname, + }, + cssClass: 'alertlike-modal', + component: BackupConfirmationComponent, + backdropDismiss: false, + }) + + m.onWillDismiss().then(res => { + const data = res.data + if (data.cancel) return + this.create(logicalname, data.password) + }) + + return await m.present() + } + + private async create (logicalname: string, password: string): Promise { + this.error = '' + + const loader = await this.loadingCtrl.create({ + spinner: 'lines', + }) + await loader.present() + + try { + await this.apiService.createBackup({ logicalname, password }) + } catch (e) { + console.error(e) + this.error = e.message + } finally { + loader.dismiss() + } + } +} diff --git a/ui/src/app/pages/server-routes/server-config/server-config.page.ts b/ui/src/app/pages/server-routes/server-config/server-config.page.ts deleted file mode 100644 index 6d711519c..000000000 --- a/ui/src/app/pages/server-routes/server-config/server-config.page.ts +++ /dev/null @@ -1,43 +0,0 @@ -import { Component } from '@angular/core' -import { ServerConfigService } from 'src/app/services/server-config.service' -import { pauseFor } from 'src/app/util/misc.util' -import { NavController } from '@ionic/angular' -import { PropertySubject } from 'src/app/util/property-subject.util' -import { S9Server, ServerModel } from 'src/app/models/server-model' -import { ApiService } from 'src/app/services/api/api.service' - -@Component({ - selector: 'server-config', - templateUrl: './server-config.page.html', - styleUrls: ['./server-config.page.scss'], -}) -export class ServerConfigPage { - server: PropertySubject - - constructor ( - private readonly serverModel: ServerModel, - private readonly serverConfigService: ServerConfigService, - private readonly apiService: ApiService, - private readonly navController: NavController, - ) { } - - ngOnInit () { - this.server = this.serverModel.watch() - } - - async doRefresh (event: any) { - await Promise.all([ - this.apiService.getServer(), - pauseFor(600), - ]) - event.target.complete() - } - - async presentModalValueEdit (key: string, add = false): Promise { - await this.serverConfigService.presentModalValueEdit(key, add) - } - - navigateBack () { - this.navController.back() - } -} diff --git a/ui/src/app/pages/server-routes/server-logs/server-logs.page.html b/ui/src/app/pages/server-routes/server-logs/server-logs.page.html index bb2f1be61..96698d57c 100644 --- a/ui/src/app/pages/server-routes/server-logs/server-logs.page.html +++ b/ui/src/app/pages/server-routes/server-logs/server-logs.page.html @@ -16,6 +16,10 @@ {{ error }} - -

{{ logs }}

+ + + + +

{{ logs }}

+
diff --git a/ui/src/app/pages/server-routes/server-logs/server-logs.page.ts b/ui/src/app/pages/server-routes/server-logs/server-logs.page.ts index e961f13f1..dde826239 100644 --- a/ui/src/app/pages/server-routes/server-logs/server-logs.page.ts +++ b/ui/src/app/pages/server-routes/server-logs/server-logs.page.ts @@ -1,9 +1,6 @@ import { Component, ViewChild } from '@angular/core' import { ApiService } from 'src/app/services/api/api.service' import { IonContent } from '@ionic/angular' -import { pauseFor } from 'src/app/util/misc.util' -import { markAsLoadingDuringP } from 'src/app/services/loader.service' -import { BehaviorSubject } from 'rxjs' @Component({ selector: 'server-logs', @@ -12,7 +9,7 @@ import { BehaviorSubject } from 'rxjs' }) export class ServerLogsPage { @ViewChild(IonContent, { static: false }) private content: IonContent - $loading$ = new BehaviorSubject(true) + loading = true error = '' logs: string @@ -20,25 +17,23 @@ export class ServerLogsPage { private readonly apiService: ApiService, ) { } - async ngOnInit () { - markAsLoadingDuringP(this.$loading$, Promise.all([ - this.getLogs(), - pauseFor(600), - ])) + ngOnInit () { + this.getLogs() } async getLogs () { this.logs = '' - this.$loading$.next(true) + this.loading = true try { - this.logs = (await this.apiService.getServerLogs()).join('\n') + const logs = await this.apiService.getServerLogs({ }) + this.logs = logs.map(l => `${l.timestamp} ${l.log}`).join('\n\n') this.error = '' setTimeout(async () => await this.content.scrollToBottom(100), 200) } catch (e) { console.error(e) this.error = e.message } finally { - this.$loading$.next(false) + this.loading = false } } } diff --git a/ui/src/app/pages/server-routes/server-metrics/server-metrics.page.html b/ui/src/app/pages/server-routes/server-metrics/server-metrics.page.html index 302b23440..ad39aaad3 100644 --- a/ui/src/app/pages/server-routes/server-metrics/server-metrics.page.html +++ b/ui/src/app/pages/server-routes/server-metrics/server-metrics.page.html @@ -3,7 +3,7 @@ - Metrics + Monitor @@ -12,18 +12,20 @@ {{ error }} - + - - {{ metricGroup.key }} - - - {{ metric.key }} - - - {{ metric.value.value }} {{ metric.value.unit }} - - - + + + {{ metricGroup.key }} + + + {{ metric.key }} + + + {{ metric.value.value }} {{ metric.value.unit }} + + + + \ No newline at end of file diff --git a/ui/src/app/pages/server-routes/server-metrics/server-metrics.page.ts b/ui/src/app/pages/server-routes/server-metrics/server-metrics.page.ts index 8b2e6660c..4b726f046 100644 --- a/ui/src/app/pages/server-routes/server-metrics/server-metrics.page.ts +++ b/ui/src/app/pages/server-routes/server-metrics/server-metrics.page.ts @@ -1,5 +1,5 @@ import { Component } from '@angular/core' -import { ServerMetrics } from 'src/app/models/server-model' +import { ServerMetrics } from 'src/app/services/api/api-types' import { ApiService } from 'src/app/services/api/api.service' import { pauseFor } from 'src/app/util/misc.util' @@ -18,15 +18,11 @@ export class ServerMetricsPage { private readonly apiService: ApiService, ) { } - async ngOnInit () { - await Promise.all([ - this.getMetrics(), - pauseFor(600), - ]) - - this.loading = false - - this.startDaemon() + ngOnInit () { + this.getMetrics().then(() => { + this.loading = false + this.startDaemon() + }) } ngOnDestroy () { @@ -47,7 +43,7 @@ export class ServerMetricsPage { async getMetrics (): Promise { try { - const metrics = await this.apiService.getServerMetrics() + const metrics = await this.apiService.getServerMetrics({ }) Object.keys(metrics).forEach(outerKey => { if (!this.metrics[outerKey]) { this.metrics[outerKey] = metrics[outerKey] diff --git a/ui/src/app/pages/server-routes/server-routing.module.ts b/ui/src/app/pages/server-routes/server-routing.module.ts index fbee41b59..c60509c6b 100644 --- a/ui/src/app/pages/server-routes/server-routing.module.ts +++ b/ui/src/app/pages/server-routes/server-routing.module.ts @@ -1,48 +1,43 @@ import { NgModule } from '@angular/core' import { Routes, RouterModule } from '@angular/router' -import { AuthGuard } from '../../guards/auth.guard' const routes: Routes = [ { path: '', - canActivate: [AuthGuard], loadChildren: () => import('./server-show/server-show.module').then(m => m.ServerShowPageModule), }, + { + path: 'backup', + loadChildren: () => import('./server-backup/server-backup.module').then(m => m.ServerBackupPageModule), + }, { path: 'specs', - canActivate: [AuthGuard], loadChildren: () => import('./server-specs/server-specs.module').then(m => m.ServerSpecsPageModule), }, { path: 'metrics', - canActivate: [AuthGuard], loadChildren: () => import('./server-metrics/server-metrics.module').then(m => m.ServerMetricsPageModule), }, { path: 'logs', - canActivate: [AuthGuard], loadChildren: () => import('./server-logs/server-logs.module').then(m => m.ServerLogsPageModule), }, { - path: 'config', - canActivate: [AuthGuard], - loadChildren: () => import('./server-config/server-config.module').then(m => m.ServerConfigPageModule), + path: 'settings', + loadChildren: () => import('./general-settings/general-settings.module').then(m => m.GeneralSettingsPageModule), }, { path: 'wifi', - canActivate: [AuthGuard], loadChildren: () => import('./wifi/wifi.module').then(m => m.WifiListPageModule), }, { path: 'lan', - canActivate: [AuthGuard], loadChildren: () => import('./lan/lan.module').then(m => m.LANPageModule), }, { path: 'developer', - canActivate: [AuthGuard], loadChildren: () => import('./developer-routes/developer-routing.module').then( m => m.DeveloperRoutingModule), - } + }, ] @NgModule({ diff --git a/ui/src/app/pages/server-routes/server-show/server-show.page.html b/ui/src/app/pages/server-routes/server-show/server-show.page.html index c7cbd0866..92f085640 100644 --- a/ui/src/app/pages/server-routes/server-show/server-show.page.html +++ b/ui/src/app/pages/server-routes/server-show/server-show.page.html @@ -1,6 +1,6 @@ - {{ server.name | async }} + {{ patch.watch$('ui', 'server-name') | ngrxPush }} @@ -8,78 +8,64 @@ - - -
- Server Updating - -
-
-
- + Backups - - - - - - {{ error }} + + + Create Backup + + + Insights + + + + + About - + + + Monitor + - - - About - + + + Logs + - - - Monitor - + Settings - - - Logs - + + + General + - + + + LAN + - - - Config - + + + WiFi + - - - LAN Settings - + + + Developer Options + - - - WiFi Settings - + Power - + + + Restart + - - - Developer Options - - - - - - - Restart - - - - - Shutdown - - - - + + + Shutdown + +
\ No newline at end of file diff --git a/ui/src/app/pages/server-routes/server-show/server-show.page.ts b/ui/src/app/pages/server-routes/server-show/server-show.page.ts index 3275370f4..52e125d0a 100644 --- a/ui/src/app/pages/server-routes/server-show/server-show.page.ts +++ b/ui/src/app/pages/server-routes/server-show/server-show.page.ts @@ -1,14 +1,10 @@ import { Component } from '@angular/core' import { LoadingOptions } from '@ionic/core' -import { ServerModel, ServerStatus } from 'src/app/models/server-model' -import { AlertController } from '@ionic/angular' -import { S9Server } from 'src/app/models/server-model' +import { AlertController, ModalController } from '@ionic/angular' import { ApiService } from 'src/app/services/api/api.service' -import { SyncDaemon } from 'src/app/services/sync.service' -import { Subscription, Observable } from 'rxjs' -import { PropertySubject, toObservable } from 'src/app/util/property-subject.util' -import { doForAtLeast } from 'src/app/util/misc.util' import { LoaderService } from 'src/app/services/loader.service' +import { PatchDbModel } from 'src/app/models/patch-db/patch-db-model' +import { ServerStatus } from 'src/app/models/patch-db/data-model' @Component({ selector: 'server-show', @@ -16,66 +12,16 @@ import { LoaderService } from 'src/app/services/loader.service' styleUrls: ['server-show.page.scss'], }) export class ServerShowPage { - error = '' - s9Host$: Observable - - server: PropertySubject - currentServer: S9Server - - subsToTearDown: Subscription[] = [] - - updatingFreeze = false - updating = false + ServerStatus = ServerStatus constructor ( - private readonly serverModel: ServerModel, private readonly alertCtrl: AlertController, private readonly loader: LoaderService, private readonly apiService: ApiService, - private readonly syncDaemon: SyncDaemon, + private readonly modalCtrl: ModalController, + public readonly patch: PatchDbModel, ) { } - async ngOnInit () { - this.server = this.serverModel.watch() - this.subsToTearDown.push( - // serverUpdateSubscription - this.server.status.subscribe(status => { - if (status === ServerStatus.UPDATING) { - this.updating = true - } else { - if (!this.updatingFreeze) { this.updating = false } - } - }), - // currentServerSubscription - toObservable(this.server).subscribe(currentServerProperties => { - this.currentServer = currentServerProperties - }), - ) - } - - ionViewDidEnter () { - this.error = '' - } - - ngOnDestroy () { - this.subsToTearDown.forEach(s => s.unsubscribe()) - } - - async doRefresh (event: any) { - await doForAtLeast([this.getServerAndApps()], 600) - event.target.complete() - } - - async getServerAndApps (): Promise { - try { - this.syncDaemon.sync() - this.error = '' - } catch (e) { - console.error(e) - this.error = e.message - } - } - async presentAlertRestart () { const alert = await this.alertCtrl.create({ backdropDismiss: false, @@ -122,27 +68,26 @@ export class ServerShowPage { private async restart () { this.loader - .of(LoadingSpinner(`Restarting ${this.currentServer.name}...`)) + .of(LoadingSpinner(`Restarting...`)) .displayDuringAsync( async () => { - this.serverModel.markUnreachable() - await this.apiService.restartServer() + // this.serverModel.markUnreachable() + await this.apiService.restartServer({ }) }) .catch(e => this.setError(e)) } private async shutdown () { this.loader - .of(LoadingSpinner(`Shutting down ${this.currentServer.name}...`)) + .of(LoadingSpinner(`Shutting down...`)) .displayDuringAsync( async () => { - this.serverModel.markUnreachable() - await this.apiService.shutdownServer() + // this.serverModel.markUnreachable() + await this.apiService.shutdownServer({ }) }) .catch(e => this.setError(e)) } setError (e: Error) { console.error(e) - this.error = e.message } } diff --git a/ui/src/app/pages/server-routes/server-specs/server-specs.page.html b/ui/src/app/pages/server-routes/server-specs/server-specs.page.html index 7963e3092..70e877a1b 100644 --- a/ui/src/app/pages/server-routes/server-specs/server-specs.page.html +++ b/ui/src/app/pages/server-routes/server-specs/server-specs.page.html @@ -8,25 +8,46 @@ - - - - {{ error }} + Basic + + + + +

Version

+

{{ server.version | displayEmver }}

+
- - - -

{{ spec.key }}

-

{{ spec.value | displayEmver }}

-

{{ spec.value }}

-
- - - -
-
-
+ Addresses + + + +

Tor Address

+

http://{{ server['tor-address'] }}

+
+ + + +
+ + +

LAN Address

+

https://{{ server['lan-address'] }}

+
+ + + +
+ + Specs + + + +

{{ spec.key }}

+

{{ spec.value }}

+
+
+
\ No newline at end of file diff --git a/ui/src/app/pages/server-routes/server-specs/server-specs.page.ts b/ui/src/app/pages/server-routes/server-specs/server-specs.page.ts index 1d7213a1e..d254eff1c 100644 --- a/ui/src/app/pages/server-routes/server-specs/server-specs.page.ts +++ b/ui/src/app/pages/server-routes/server-specs/server-specs.page.ts @@ -1,11 +1,7 @@ import { Component } from '@angular/core' -import { S9Server } from 'src/app/models/server-model' import { ToastController } from '@ionic/angular' import { copyToClipboard } from 'src/app/util/web.util' -import { PropertySubject } from 'src/app/util/property-subject.util' -import { ModelPreload } from 'src/app/models/model-preload' -import { markAsLoadingDuring$ } from 'src/app/services/loader.service' -import { BehaviorSubject } from 'rxjs' +import { PatchDbModel } from 'src/app/models/patch-db/patch-db-model' @Component({ selector: 'server-specs', @@ -13,28 +9,15 @@ import { BehaviorSubject } from 'rxjs' styleUrls: ['./server-specs.page.scss'], }) export class ServerSpecsPage { - server: PropertySubject = { } as any - error = '' - $loading$ = new BehaviorSubject(true) constructor ( private readonly toastCtrl: ToastController, - private readonly preload: ModelPreload, + public readonly patch: PatchDbModel, ) { } - async ngOnInit () { - markAsLoadingDuring$(this.$loading$, this.preload.server()).subscribe({ - next: s => this.server = s, - error: e => { - console.error(e) - this.error = e.message - }, - }) - } - - async copyTor () { + async copy (address: string) { let message = '' - await copyToClipboard((this.server.specs.getValue()['Tor Address'] as string).trim() || '') + await copyToClipboard(address || '') .then(success => { message = success ? 'copied to clipboard!' : 'failed to copy'}) const toast = await this.toastCtrl.create({ diff --git a/ui/src/app/pages/server-routes/wifi/wifi-add/wifi-add.page.html b/ui/src/app/pages/server-routes/wifi/wifi-add/wifi-add.page.html index 0e2b6ace5..c8b50cadf 100644 --- a/ui/src/app/pages/server-routes/wifi/wifi-add/wifi-add.page.html +++ b/ui/src/app/pages/server-routes/wifi/wifi-add/wifi-add.page.html @@ -34,13 +34,13 @@ - - Save for Later + +

Save

- - Save and Connect Now + +

Save & Connect

diff --git a/ui/src/app/pages/server-routes/wifi/wifi-add/wifi-add.page.ts b/ui/src/app/pages/server-routes/wifi/wifi-add/wifi-add.page.ts index 76f44c546..d451e9057 100644 --- a/ui/src/app/pages/server-routes/wifi/wifi-add/wifi-add.page.ts +++ b/ui/src/app/pages/server-routes/wifi/wifi-add/wifi-add.page.ts @@ -3,7 +3,6 @@ import { NavController } from '@ionic/angular' import { ApiService } from 'src/app/services/api/api.service' import { WifiService } from '../wifi.service' import { LoaderService } from 'src/app/services/loader.service' -import { ServerModel } from 'src/app/models/server-model' @Component({ selector: 'wifi-add', @@ -22,18 +21,22 @@ export class WifiAddPage { private readonly apiService: ApiService, private readonly loader: LoaderService, private readonly wifiService: WifiService, - private readonly serverModel: ServerModel, ) { } - async add (): Promise { + async save (): Promise { this.error = '' this.loader.of({ message: 'Saving...', spinner: 'lines', cssClass: 'loader', - }).displayDuringAsync( async () => { - await this.apiService.addWifi(this.ssid, this.password, this.countryCode, false) - this.wifiService.addWifi(this.ssid) + }).displayDuringAsync(async () => { + await this.apiService.addWifi({ + ssid: this.ssid, + password: this.password, + country: this.countryCode, + priority: 0, + connect: false, + }) this.navCtrl.back() }).catch(e => { console.error(e) @@ -41,23 +44,25 @@ export class WifiAddPage { }) } - async addAndConnect (): Promise { + async saveAndConnect (): Promise { this.error = '' this.loader.of({ message: 'Connecting. This could take while...', spinner: 'lines', cssClass: 'loader', - }).displayDuringAsync( async () => { - const current = this.serverModel.peek().wifi.current - await this.apiService.addWifi(this.ssid, this.password, this.countryCode, true) - const success = await this.wifiService.confirmWifi(this.ssid) - if (success) { - this.navCtrl.back() - this.wifiService.presentAlertSuccess(this.ssid, current) - } else { - this.wifiService.presentToastFail() - } - }).catch (e => { + }).displayDuringAsync(async () => { + await this.apiService.addWifi({ + ssid: this.ssid, + password: this.password, + country: this.countryCode, + priority: 0, + connect: true, + }) + const success = this.wifiService.confirmWifi(this.ssid) + if (success) { + this.navCtrl.back() + } + }).catch (e => { console.error(e) this.error = e.message }) diff --git a/ui/src/app/pages/server-routes/wifi/wifi.module.ts b/ui/src/app/pages/server-routes/wifi/wifi.module.ts index 0fe99daed..dbadcf1f4 100644 --- a/ui/src/app/pages/server-routes/wifi/wifi.module.ts +++ b/ui/src/app/pages/server-routes/wifi/wifi.module.ts @@ -4,6 +4,7 @@ import { IonicModule } from '@ionic/angular' import { RouterModule, Routes } from '@angular/router' import { WifiListPage } from './wifi.page' import { PwaBackComponentModule } from 'src/app/components/pwa-back-button/pwa-back.component.module' +import { SharingModule } from 'src/app/modules/sharing.module' const routes: Routes = [ { @@ -22,6 +23,7 @@ const routes: Routes = [ IonicModule, RouterModule.forChild(routes), PwaBackComponentModule, + SharingModule, ], declarations: [WifiListPage], }) diff --git a/ui/src/app/pages/server-routes/wifi/wifi.page.html b/ui/src/app/pages/server-routes/wifi/wifi.page.html index 6c05c9555..15b3766e9 100644 --- a/ui/src/app/pages/server-routes/wifi/wifi.page.html +++ b/ui/src/app/pages/server-routes/wifi/wifi.page.html @@ -8,11 +8,6 @@ - - - - - {{ error }} @@ -20,21 +15,20 @@ - By providing your Embassy with WiFi credentials for one or more networks, you can remove the Ethernet cable and place your Embassy anywhere. +

About

+

Embassy will automatically connect to available networks, allowing you to remove the Ethernet cable.


-
- Warning! -
-
- Connecting, disconnecting, or changing WiFi networks can cause your Embassy and its services to become unreachable for up to an hour. Please be patient. +

Connecting, disconnecting, or changing WiFi networks can cause your Embassy and its services to become unreachable for up to an hour. Please be patient.

Saved Networks - - {{ ssid }} - - + + + {{ ssid }} + + +
diff --git a/ui/src/app/pages/server-routes/wifi/wifi.page.ts b/ui/src/app/pages/server-routes/wifi/wifi.page.ts index 1f291b0f2..f37ecc0aa 100644 --- a/ui/src/app/pages/server-routes/wifi/wifi.page.ts +++ b/ui/src/app/pages/server-routes/wifi/wifi.page.ts @@ -2,12 +2,10 @@ import { Component } from '@angular/core' import { ActionSheetController } from '@ionic/angular' import { ApiService } from 'src/app/services/api/api.service' import { ActionSheetButton } from '@ionic/core' -import { pauseFor } from 'src/app/util/misc.util' import { WifiService } from './wifi.service' -import { PropertySubject } from 'src/app/util/property-subject.util' -import { S9Server } from 'src/app/models/server-model' import { LoaderService } from 'src/app/services/loader.service' -import { ModelPreload } from 'src/app/models/model-preload' +import { WiFiInfo } from 'src/app/models/patch-db/data-model' +import { PatchDbModel } from 'src/app/models/patch-db/patch-db-model' @Component({ selector: 'wifi', @@ -15,32 +13,17 @@ import { ModelPreload } from 'src/app/models/model-preload' styleUrls: ['wifi.page.scss'], }) export class WifiListPage { - server: PropertySubject = { } as any - error: string + error = '' constructor ( private readonly apiService: ApiService, private readonly loader: LoaderService, private readonly actionCtrl: ActionSheetController, private readonly wifiService: WifiService, - private readonly preload: ModelPreload, + public readonly patch: PatchDbModel, ) { } - async ngOnInit () { - this.loader.displayDuring$( - this.preload.server(), - ).subscribe(s => this.server = s) - } - - async doRefresh (event: any) { - await Promise.all([ - this.apiService.getServer(), - pauseFor(600), - ]) - event.target.complete() - } - - async presentAction (ssid: string) { + async presentAction (ssid: string, wifi: WiFiInfo) { const buttons: ActionSheetButton[] = [ { text: 'Forget', @@ -51,7 +34,7 @@ export class WifiListPage { }, ] - if (ssid !== this.server.wifi.getValue().current) { + if (ssid !== wifi.connected) { buttons.unshift( { text: 'Connect', @@ -69,7 +52,7 @@ export class WifiListPage { await action.present() } - // Let's add country code here. + // Let's add country code here async connect (ssid: string): Promise { this.error = '' this.loader.of({ @@ -77,17 +60,11 @@ export class WifiListPage { spinner: 'lines', cssClass: 'loader', }).displayDuringAsync(async () => { - const current = this.server.wifi.getValue().current - await this.apiService.connectWifi(ssid) - const success = await this.wifiService.confirmWifi(ssid) - if (success) { - this.wifiService.presentAlertSuccess(ssid, current) - } else { - this.wifiService.presentToastFail() - } + await this.apiService.connectWifi({ ssid }) + this.wifiService.confirmWifi(ssid) }).catch(e => { console.error(e) - this.error = e.message + this.error = '' }) } @@ -97,13 +74,12 @@ export class WifiListPage { message: 'Deleting...', spinner: 'lines', cssClass: 'loader', - }).displayDuringAsync( async () => { - await this.apiService.deleteWifi(ssid) - this.wifiService.removeWifi(ssid) + }).displayDuringAsync(async () => { + await this.apiService.deleteWifi({ ssid }) this.error = '' }).catch(e => { console.error(e) - this.error = e.message + this.error = '' }) } } diff --git a/ui/src/app/pages/server-routes/wifi/wifi.service.ts b/ui/src/app/pages/server-routes/wifi/wifi.service.ts index 36d0fb7fd..a908b03bc 100644 --- a/ui/src/app/pages/server-routes/wifi/wifi.service.ts +++ b/ui/src/app/pages/server-routes/wifi/wifi.service.ts @@ -1,8 +1,8 @@ import { Injectable } from '@angular/core' import { AlertController, ToastController } from '@ionic/angular' -import { ApiService } from 'src/app/services/api/api.service' -import { pauseFor } from 'src/app/util/misc.util' -import { ServerModel } from 'src/app/models/server-model' +import { merge, Observable, timer } from 'rxjs' +import { filter, map, take, tap } from 'rxjs/operators' +import { PatchDbModel } from 'src/app/models/patch-db/patch-db-model' @Injectable({ providedIn: 'root', @@ -10,53 +10,39 @@ import { ServerModel } from 'src/app/models/server-model' export class WifiService { constructor ( - private readonly apiService: ApiService, private readonly toastCtrl: ToastController, private readonly alertCtrl: AlertController, - private readonly serverModel: ServerModel, + private readonly patch: PatchDbModel, ) { } - addWifi (ssid: string): void { - const wifi = this.serverModel.peek().wifi - this.serverModel.update({ wifi: { ...wifi, ssids: [...new Set([ssid, ...wifi.ssids])] } }) + confirmWifi (ssid: string): Observable { + const success$ = this.patch.watch$('server-info', 'wifi', 'connected') + .pipe( + filter(connected => connected === ssid), + tap(connected => this.presentAlertSuccess(connected)), + map(_ => true), + ) + + const timer$ = timer(20000) + .pipe( + map(_ => false), + tap(_ => this.presentToastFail()), + ) + + return merge(success$, timer$).pipe(take(1)) } - removeWifi (ssid: string): void { - const wifi = this.serverModel.peek().wifi - this.serverModel.update({ wifi: { ...wifi, ssids: wifi.ssids.filter(s => s !== ssid) } }) + private async presentAlertSuccess (ssid: string): Promise { + const alert = await this.alertCtrl.create({ + header: `Connected to "${ssid}"`, + message: 'Note. It may take several minutes to an hour for your Embassy to reconnect over Tor.', + buttons: ['OK'], + }) + + await alert.present() } - async confirmWifi (ssid: string): Promise { - const timeout = 4000 - const maxAttempts = 5 - let attempts = 0 - - while (attempts < maxAttempts) { - try { - const start = new Date().valueOf() - const { current, ssids } = (await this.apiService.getServer(timeout)).wifi - const end = new Date().valueOf() - if (current === ssid) { - this.serverModel.update({ wifi: { current, ssids } }) - break - } else { - attempts++ - const diff = end - start - await pauseFor(Math.max(2000, timeout - diff)) - if (attempts === maxAttempts) { - this.serverModel.update({ wifi: { current, ssids } }) - } - } - } catch (e) { - attempts++ - console.error(e) - } - } - - return this.serverModel.peek().wifi.current === ssid - } - - async presentToastFail (): Promise { + private async presentToastFail (): Promise { const toast = await this.toastCtrl.create({ header: 'Failed to connect:', message: `Check credentials and try again`, @@ -71,20 +57,9 @@ export class WifiService { }, }, ], - cssClass: 'notification-toast', + cssClass: 'notification-toast-error', }) await toast.present() } - - async presentAlertSuccess (current: string, old?: string): Promise { - let message = 'Note. It may take a while for your Embassy to reconnect over Tor, upward of a few hours. Unplugging the device and plugging it back in may help, but it may also just need time. You may also need to hard refresh your browser cache.' - const alert = await this.alertCtrl.create({ - header: `Connected to "${current}"`, - message: old ? message : 'You may now unplug your Embassy from Ethernet.

' + message, - buttons: ['OK'], - }) - - await alert.present() - } } diff --git a/ui/src/app/pipes/annotation-status.pipe.ts b/ui/src/app/pipes/annotation-status.pipe.ts index 016c6ed05..bcaf7da41 100644 --- a/ui/src/app/pipes/annotation-status.pipe.ts +++ b/ui/src/app/pipes/annotation-status.pipe.ts @@ -1,5 +1,5 @@ import { Pipe, PipeTransform } from '@angular/core' -import { Annotation } from '../app-config/config-utilities' +import { Annotation } from '../pkg-config/config-utilities' @Pipe({ name: 'annotationStatus', diff --git a/ui/src/app/pipes/display-bulb.pipe.ts b/ui/src/app/pipes/display-bulb.pipe.ts index 2e6dbbe69..470dd106d 100644 --- a/ui/src/app/pipes/display-bulb.pipe.ts +++ b/ui/src/app/pipes/display-bulb.pipe.ts @@ -1,21 +1,22 @@ import { Pipe, PipeTransform } from '@angular/core' -import { AppStatus } from '../models/app-model' -import { AppStatusRendering } from '../util/status-rendering' +import { PackageDataEntry } from '../models/patch-db/data-model' +import { ConnectionState } from '../services/connection.service' +import { renderPkgStatus } from '../services/pkg-status-rendering.service' @Pipe({ name: 'displayBulb', }) export class DisplayBulbPipe implements PipeTransform { - transform (status: AppStatus, d: DisplayBulb): boolean { - switch (AppStatusRendering[status].color) { - case 'danger': return d === 'red' - case 'success': return d === 'green' - case 'warning': return d === 'yellow' - default: return d === 'off' + transform (pkg: PackageDataEntry, bulb: DisplayBulb, connection: ConnectionState): boolean { + const { color } = renderPkgStatus(pkg, connection) + switch (color) { + case 'danger': return bulb === 'red' + case 'success': return bulb === 'green' + case 'warning': return bulb === 'yellow' + default: return bulb === 'off' } } - } type DisplayBulb = 'off' | 'red' | 'green' | 'yellow' diff --git a/ui/src/app/pipes/empty.pipe.ts b/ui/src/app/pipes/empty.pipe.ts new file mode 100644 index 000000000..e78c1581f --- /dev/null +++ b/ui/src/app/pipes/empty.pipe.ts @@ -0,0 +1,11 @@ +import { Pipe, PipeTransform } from '@angular/core' +import { isEmptyObject } from '../util/misc.util' + +@Pipe({ + name: 'empty', +}) +export class EmptyPipe implements PipeTransform { + transform (obj: { }): boolean { + return isEmptyObject(obj) + } +} \ No newline at end of file diff --git a/ui/src/app/pipes/emver.pipe.ts b/ui/src/app/pipes/emver.pipe.ts index cbff391de..e220f351d 100644 --- a/ui/src/app/pipes/emver.pipe.ts +++ b/ui/src/app/pipes/emver.pipe.ts @@ -39,24 +39,6 @@ export class EmverDisplayPipe implements PipeTransform { } } -@Pipe({ - name: 'isValidEmver', -}) -export class EmverIsValidPipe implements PipeTransform { - constructor () { } - - transform (version: string): boolean { - return isValidEmver(version) - } -} - -export function isValidEmver (version: string): boolean { - const vs = version.split('.') - if (vs.length < 3 || vs.length > 5) return false - if (!vs.every(v => !isNaN(parseFloat(v)))) return false - return true -} - export function displayEmver (version: string): string { const vs = version.split('.') if (vs.length === 4) return `${vs[0]}.${vs[1]}.${vs[2]}~${vs[3]}` diff --git a/ui/src/app/pipes/icon.pipe.ts b/ui/src/app/pipes/icon.pipe.ts deleted file mode 100644 index dba6711cd..000000000 --- a/ui/src/app/pipes/icon.pipe.ts +++ /dev/null @@ -1,11 +0,0 @@ -import { Pipe, PipeTransform } from '@angular/core' - -@Pipe({ - name: 'iconParse', -}) -export class IconPipe implements PipeTransform { - transform (iconUrl: string): string { - if (iconUrl.startsWith('/')) return '/api' + iconUrl - return iconUrl - } -} diff --git a/ui/src/app/pipes/includes.pipe.ts b/ui/src/app/pipes/includes.pipe.ts index 95cd109b4..01182283c 100644 --- a/ui/src/app/pipes/includes.pipe.ts +++ b/ui/src/app/pipes/includes.pipe.ts @@ -4,7 +4,7 @@ import { Pipe, PipeTransform } from '@angular/core' name: 'includes', }) export class IncludesPipe implements PipeTransform { - transform (set: T[], val: T): boolean { - return set.includes(val) + transform (list: T[], val: T): boolean { + return list.includes(val) } } \ No newline at end of file diff --git a/ui/src/app/pipes/installed-latest-comparison.pipe.ts b/ui/src/app/pipes/installed-latest-comparison.pipe.ts index 7e1fda7ab..9eeb77078 100644 --- a/ui/src/app/pipes/installed-latest-comparison.pipe.ts +++ b/ui/src/app/pipes/installed-latest-comparison.pipe.ts @@ -1,46 +1,45 @@ -import { Pipe, PipeTransform } from '@angular/core' -import { combineLatest, Observable } from 'rxjs' -import { map } from 'rxjs/operators' -import { AppAvailableFull, AppAvailablePreview } from 'src/app/models/app-types' -import { Emver } from '../services/emver.service' -import { PropertySubject } from '../util/property-subject.util' +// import { Pipe, PipeTransform } from '@angular/core' +// import { combineLatest, Observable } from 'rxjs' +// import { map } from 'rxjs/operators' +// import { Emver } from '../services/emver.service' -@Pipe({ - name: 'compareInstalledAndLatest', -}) -export class InstalledLatestComparisonPipe implements PipeTransform { - constructor (private readonly emver: Emver) { } - transform (app: PropertySubject): Observable<'not-installed' | 'installed-below' | 'installed-above' | 'installed-equal'> { - return combineLatest([app.versionInstalled, app.versionLatest]).pipe( - map(([i, l]) => { - if (!i) return 'not-installed' - switch (this.emver.compare(i, l)){ - case 0: return 'installed-equal' - case 1: return 'installed-above' - case -1: return 'installed-below' - } - }), - ) - } -} +// @Pipe({ +// name: 'compareInstalledAndLatest', +// }) +// export class InstalledLatestComparisonPipe implements PipeTransform { +// constructor (private readonly emver: Emver) { } -@Pipe({ - name: 'compareInstalledAndViewing', -}) -export class InstalledViewingComparisonPipe implements PipeTransform { - constructor (private readonly emver: Emver) { } +// transform (app: PropertySubject): Observable<'not-installed' | 'installed-below' | 'installed-above' | 'installed-equal'> { +// return combineLatest([app.versionInstalled, app.versionLatest]).pipe( +// map(([i, l]) => { +// if (!i) return 'not-installed' +// switch (this.emver.compare(i, l)){ +// case 0: return 'installed-equal' +// case 1: return 'installed-above' +// case -1: return 'installed-below' +// } +// }), +// ) +// } +// } - transform (app: PropertySubject): Observable<'not-installed' | 'installed-below' | 'installed-above' | 'installed-equal'> { - return combineLatest([app.versionInstalled, app.versionViewing]).pipe( - map(([i, l]) => { - if (!i) return 'not-installed' - switch (this.emver.compare(i, l)){ - case 0: return 'installed-equal' - case 1: return 'installed-above' - case -1: return 'installed-below' - } - }), - ) - } -} +// @Pipe({ +// name: 'compareInstalledAndViewing', +// }) +// export class InstalledViewingComparisonPipe implements PipeTransform { +// constructor (private readonly emver: Emver) { } + +// transform (app: PropertySubject): Observable<'not-installed' | 'installed-below' | 'installed-above' | 'installed-equal'> { +// return combineLatest([app.versionInstalled, app.versionViewing]).pipe( +// map(([i, l]) => { +// if (!i) return 'not-installed' +// switch (this.emver.compare(i, l)){ +// case 0: return 'installed-equal' +// case 1: return 'installed-above' +// case -1: return 'installed-below' +// } +// }), +// ) +// } +// } diff --git a/ui/src/app/pipes/notification-color.pipe.ts b/ui/src/app/pipes/notification-color.pipe.ts new file mode 100644 index 000000000..4b2830ca6 --- /dev/null +++ b/ui/src/app/pipes/notification-color.pipe.ts @@ -0,0 +1,23 @@ +import { Pipe, PipeTransform } from '@angular/core' +import { NotificationLevel, ServerNotification } from '../services/api/api-types' + +@Pipe({ + name: 'notificationColor', +}) +export class NotificationColorPipe implements PipeTransform { + transform (notification: ServerNotification): string { + const level = notification.level + switch (level) { + case NotificationLevel.Info: + return 'primary' + case NotificationLevel.Success: + return 'success' + case NotificationLevel.Warning: + return 'warning' + case NotificationLevel.Error: + return 'danger' + default: + return '' + } + } +} diff --git a/ui/src/app/pipes/peek-properties.pipe.ts b/ui/src/app/pipes/peek-properties.pipe.ts deleted file mode 100644 index 901fff628..000000000 --- a/ui/src/app/pipes/peek-properties.pipe.ts +++ /dev/null @@ -1,11 +0,0 @@ -import { Pipe, PipeTransform } from '@angular/core'; -import { peekProperties, PropertySubject } from '../util/property-subject.util' - -@Pipe({ - name: 'peekProperties', -}) -export class PeekPropertiesPipe implements PipeTransform { - transform (value: PropertySubject): T { - return peekProperties(value) - } -} diff --git a/ui/src/app/pipes/status.pipe.ts b/ui/src/app/pipes/status.pipe.ts new file mode 100644 index 000000000..aadf5c6c1 --- /dev/null +++ b/ui/src/app/pipes/status.pipe.ts @@ -0,0 +1,13 @@ +import { Pipe, PipeTransform } from '@angular/core' +import { PackageDataEntry } from '../models/patch-db/data-model' +import { ConnectionState } from '../services/connection.service' +import { FEStatus, renderPkgStatus } from '../services/pkg-status-rendering.service' + +@Pipe({ + name: 'status', +}) +export class StatusPipe implements PipeTransform { + transform (pkg: PackageDataEntry, connection: ConnectionState): FEStatus { + return renderPkgStatus(pkg, connection).feStatus + } +} \ No newline at end of file diff --git a/ui/src/app/pipes/ui.pipe.ts b/ui/src/app/pipes/ui.pipe.ts new file mode 100644 index 000000000..7c02a9f68 --- /dev/null +++ b/ui/src/app/pipes/ui.pipe.ts @@ -0,0 +1,36 @@ +import { Pipe, PipeTransform } from '@angular/core' +import { PackageDataEntry, Manifest } from '../models/patch-db/data-model' +import { ConfigService, getManifest, hasUi } from '../services/config.service' + +@Pipe({ + name: 'hasUi', +}) +export class HasUiPipe implements PipeTransform { + + transform (pkg: PackageDataEntry): boolean { + const interfaces = getManifest(pkg).interfaces + return hasUi(interfaces) + } +} + +@Pipe({ + name: 'isLaunchable', +}) +export class LaunchablePipe implements PipeTransform { + + constructor (private configService: ConfigService) { } + + transform (pkg: PackageDataEntry): boolean { + return this.configService.isLaunchable(pkg) + } +} + +@Pipe({ + name: 'manifest', +}) +export class ManifestPipe implements PipeTransform { + + transform (pkg: PackageDataEntry): Manifest { + return getManifest(pkg) + } +} diff --git a/ui/src/app/app-config/config-cursor.ts b/ui/src/app/pkg-config/config-cursor.ts similarity index 98% rename from ui/src/app/app-config/config-cursor.ts rename to ui/src/app/pkg-config/config-cursor.ts index 332983ccc..6a6e5a29d 100644 --- a/ui/src/app/app-config/config-cursor.ts +++ b/ui/src/app/pkg-config/config-cursor.ts @@ -1,9 +1,7 @@ -import { - ValueSpec, ConfigSpec, UniqueBy, ValueSpecOf, ValueType, ValueSpecObject, ValueSpecUnion -} from './config-types' +import { ValueSpec, ConfigSpec, UniqueBy, ValueSpecOf, ValueType, ValueSpecObject, ValueSpecUnion } from './config-types' +import { Annotations, getDefaultObject, getDefaultUnion, listInnerSpec, mapConfigSpec, Range } from './config-utilities' import * as pointer from 'json-pointer' import * as handlebars from 'handlebars' -import { Annotations, getDefaultObject, getDefaultUnion, listInnerSpec, mapConfigSpec, Range } from './config-utilities' export class ConfigCursor { private cachedSpec?: ValueSpecOf @@ -237,7 +235,7 @@ export class ConfigCursor { displayUniqueBy( (cursor.spec() as ValueSpecObject | ValueSpecUnion).uniqueBy, (cursor.spec() as ValueSpecObject | ValueSpecUnion), - cursor.config() + cursor.config(), ) } must be unique.` : '' } @@ -455,7 +453,7 @@ function isEqual (uniqueBy: UniqueBy, lhs: ConfigCursor<'object'>, rhs: ConfigCu } } -export function displayUniqueBy(uniqueBy: UniqueBy, spec: ValueSpecObject | ValueSpecUnion, value: object): string { +export function displayUniqueBy (uniqueBy: UniqueBy, spec: ValueSpecObject | ValueSpecUnion, value: object): string { if (typeof uniqueBy === 'string') { if (spec.type === 'object') { return spec.spec[uniqueBy].name diff --git a/ui/src/app/app-config/config-types.ts b/ui/src/app/pkg-config/config-types.ts similarity index 100% rename from ui/src/app/app-config/config-types.ts rename to ui/src/app/pkg-config/config-types.ts diff --git a/ui/src/app/app-config/config-utilities.ts b/ui/src/app/pkg-config/config-utilities.ts similarity index 100% rename from ui/src/app/app-config/config-utilities.ts rename to ui/src/app/pkg-config/config-utilities.ts diff --git a/ui/src/app/app-config/modal-presentable.ts b/ui/src/app/pkg-config/modal-presentable.ts similarity index 100% rename from ui/src/app/app-config/modal-presentable.ts rename to ui/src/app/pkg-config/modal-presentable.ts diff --git a/ui/src/app/services/api/API.def b/ui/src/app/services/api/API.def deleted file mode 100644 index eeb0ca4cd..000000000 --- a/ui/src/app/services/api/API.def +++ /dev/null @@ -1,107 +0,0 @@ - -//////////////// Install/Uninstall //////////////////////////////////////////////// - -type AppDependentBreakage = { - // id of the dependent app which will or did break (Stopped) given the action. - id: string - title: string - iconUrl: string -} - -POST /apps/:appId/install(?dryrun) - -body: { - version: string, //semver -} -response : ApiAppInstalledFull & { breakages: AppDependentBreakage[] } - - - -POST /apps/:appId/uninstall(?dryrun) - -response : { breakages: AppDependentBreakage[] } - -/////////////////////////////// Store/Show ///////////////////////////////////////////////// - - -type ApiAppAvailableFull = ... { - // app base data - id: string - title: string - status: AppStatus | null - versionInstalled: string | null - iconURL: string - - // preview data - versionLatest: string - descriptionShort: string - - // version specific data - releaseNotes: string - serviceRequirements: AppDependencyRequirement[] - - // other data - descriptionLong: string, - version: string[], -} - -type AppDependencyRequirement = ... { - //app base data (minus status + version installed) - id: string - title: string - iconURL: string - - // dependency data - optional: string | null - default: boolean - versionSpec: string - description: string | null - violation: AppDependencyRequirementViolation | null -} - -type AppDependencyRequirementViolation = - { name: 'missing'; suggestedVersion: string; } | - { name: 'incompatible-version'; suggestedVersion: string; } | - { name: 'incompatible-config'; ruleViolations: string; auto-configurable: boolean } | // (auto-configurable for if/when we do that) - { name: 'incompatible-status'; status: AppStatus; } - - -// Get App Available Full -GET /apps/:appId/store - -response: ApiAppAvailableFull - - -// Get Version Specific Data for an App Available -GET /apps/:appId/store/:version - -response: { - // version specific data - releaseNotes: string - serviceRequirements: AppDependencyRequirement[] -} - -///////////////////////////// Installed/Show /////////////////////////////////////////// - - -type ApiAppInstalledFull { - // app base data - id: string - title: string - status: AppStatus | null - versionInstalled: string | null - iconURL: string - - // preview data - - // other data - instructions: string | null - lastBackup: string | null - configuredRequirements: AppDependencyRequirement[] | null // null if not yet configured -} - - -// Get App Installed Full -GET /apps/:appId/installed - -reseponse: AppInstalledFull \ No newline at end of file diff --git a/ui/src/app/services/api/api-types.ts b/ui/src/app/services/api/api-types.ts index 263b08844..2c081c0c5 100644 --- a/ui/src/app/services/api/api-types.ts +++ b/ui/src/app/services/api/api-types.ts @@ -1,43 +1,307 @@ -import { ConfigSpec } from 'src/app/app-config/config-types' -import { AppAvailableFull, AppInstalledFull, AppInstalledPreview } from 'src/app/models/app-types' -import { Rules } from '../../models/app-model' -import { SSHFingerprint, ServerStatus, ServerSpecs } from '../../models/server-model' +import { Dump, Operation, Revision } from 'patch-db-client' +import { PackagePropertiesVersioned } from 'src/app/util/properties.util' +import { ConfigSpec } from 'src/app/pkg-config/config-types' +import { DataModel, DependencyError, Manifest, URL } from 'src/app/models/patch-db/data-model' -/** SERVER **/ +export module RR { -export interface ApiServer { - name: string - status: ServerStatus - versionInstalled: string - alternativeRegistryUrl: string | null - specs: ServerSpecs - wifi: { - ssids: string[] - current: string | null + // DB + + export type GetRevisionsRes = Revision[] | Dump + + export type GetDumpRes = Dump + + export type SetDBValueReq = WithExpire<{ pointer: string, value: any }> // db.put.ui + export type SetDBValueRes = WithRevision + + // auth + + export type SubmitPinReq = { pin: string } // auth.pin - unauthed + export type SubmitPinRes = null + + export type SubmitPasswordReq = { password: string } // auth.password - unauthed + export type SubmitPasswordRes = null + + export type LogoutReq = { } // auth.logout + export type LogoutRes = null + + // server + + export type GetServerLogsReq = { before?: string } // server.logs + export type GetServerLogsRes = Log[] + + export type GetServerMetricsReq = { } // server.metrics + export type GetServerMetricsRes = ServerMetrics + + export type UpdateServerReq = WithExpire<{ }> // server.update + export type UpdateServerRes = WithRevision + + export type RestartServerReq = { } // server.restart + export type RestartServerRes = null + + export type ShutdownServerReq = { } // server.shutdown + export type ShutdownServerRes = null + + // network + + export type RefreshLanReq = { } // network.lan.refresh + export type RefreshLanRes = null + + // registry + + export type SetRegistryReq = WithExpire<{ url: string }> // registry.set + export type SetRegistryRes = WithRevision + + // notification + + export type GetNotificationsReq = WithExpire<{ page: number, 'per-page': number }> // notification.list + export type GetNotificationsRes = WithRevision[]> + + export type DeleteNotificationReq = { id: string } // notification.delete + export type DeleteNotificationRes = null + + // wifi + + export type AddWifiReq = { // wifi.add + ssid: string + password: string + country: string + priority: number + connect: boolean } - ssh: SSHFingerprint[] - serverId: string - welcomeAck: boolean - autoCheckUpdates: boolean + export type AddWifiRes = null + + export type ConnectWifiReq = WithExpire<{ ssid: string }> // wifi.connect + export type ConnectWifiRes = WithRevision + + export type DeleteWifiReq = WithExpire<{ ssid: string }> // wifi.delete + export type DeleteWifiRes = WithRevision + + // ssh + + export type GetSSHKeysReq = { } // ssh.get + export type GetSSHKeysRes = SSHKeys + + export type AddSSHKeyReq = { pubkey: string } // ssh.add + export type AddSSHKeyRes = SSHKeys + + export type DeleteSSHKeyReq = { hash: string } // ssh.delete + export type DeleteSSHKeyRes = null + + // backup + + export type CreateBackupReq = WithExpire<{ logicalname: string, password: string }> // backup.create + export type CreateBackupRes = WithRevision + + export type RestoreBackupReq = { logicalname: string, password: string } // backup.restore - unauthed + export type RestoreBackupRes = null + + // disk + + export type GetDisksReq = { } // disk.list + export type GetDisksRes = DiskInfo + + export type EjectDisksReq = { logicalname: string } // disk.eject + export type EjectDisksRes = null + + // package + + export type GetPackagePropertiesReq = { id: string } // package.properties + export type GetPackagePropertiesRes = PackagePropertiesVersioned + + export type GetPackageLogsReq = { id: string, before?: string } // package.logs + export type GetPackageLogsRes = Log[] + + export type InstallPackageReq = WithExpire<{ id: string, version: string }> // package.install + export type InstallPackageRes = WithRevision + + export type DryUpdatePackageReq = { id: string, version: string } // package.update.dry + export type DryUpdatePackageRes = BreakageRes + + export type GetPackageConfigReq = { id: string } // package.config.get + export type GetPackageConfigRes = { spec: ConfigSpec, config: object } + + export type DrySetPackageConfigReq = { id: string, config: object } // package.config.set.dry + export type DrySetPackageConfigRes = BreakageRes + + export type SetPackageConfigReq = WithExpire // package.config.set + export type SetPackageConfigRes = WithRevision + + export type RestorePackageReq = WithExpire<{ id: string, logicalname: string, password: string }> // package.backup.restore + export type RestorePackageRes = WithRevision + + export type ExecutePackageActionReq = { id: string, 'action-id': string, input?: object } // package.action + export type ExecutePackageActionRes = ActionResponse + + export type StartPackageReq = WithExpire<{ id: string }> // package.start + export type StartPackageRes = WithRevision + + export type DryStopPackageReq = StopPackageReq // package.stop.dry + export type DryStopPackageRes = BreakageRes + + export type StopPackageReq = WithExpire<{ id: string }> // package.stop + export type StopPackageRes = WithRevision + + export type DryRemovePackageReq = RemovePackageReq // package.remove.dry + export type DryRemovePackageRes = BreakageRes + + export type RemovePackageReq = WithExpire<{ id: string }> // package.remove + export type RemovePackageRes = WithRevision + + export type DryConfigureDependencyReq = { 'dependency-id': string, 'dependent-id': string } // package.dependency.configure.dry + export type DryConfigureDependencyRes = object + + + // marketplace + + export type GetMarketplaceDataReq = { } + export type GetMarketplaceDataRes = MarketplaceData + + export type GetMarketplaceEOSReq = { } + export type GetMarketplaceEOSRes = MarketplaceEOS + + export type GetAvailableListReq = { category?: string, query?: string, page: number, 'per-page': number } + export type GetAvailableListRes = AvailablePreview[] + + export type GetAvailableShowReq = { id: string, version?: string } + export type GetAvailableShowRes = AvailableShow } -/** APPS **/ -export type ApiAppAvailableFull = Omit +export type WithExpire = { 'expire-id'?: string } & T +export type WithRevision = { response: T, revision?: Revision } -export type ApiAppInstalledPreview = Omit -export type ApiAppInstalledFull = Omit - -export interface ApiAppConfig { - spec: ConfigSpec - config: object | null - rules: Rules[] +export interface MarketplaceData { + categories: string[] } -/** MISC **/ - -export type Unit = { never?: never; } // hack for the unit typ - -export type V1Status = { - status: 'nothing' | 'instructions' | 'available' +export interface MarketplaceEOS { version: string + headline: string + notes: string +} + +export interface AvailablePreview { + id: string + title: string + version: string + icon: URL + descriptionShort: string +} + +export interface AvailableShow { + icon: URL + manifest: Manifest + categories: string[] + versions: string[] + 'dependency-metadata': { + [id: string]: { + title: string + icon: URL + } + } +} + +export interface BreakageRes { + patch: Operation[], + breakages: Breakages +} + +export interface Breakages { + [id: string]: TaggedDependencyError +} + +export interface TaggedDependencyError { + dependency: string, + error: DependencyError, +} + +export interface Log { + timestamp: string + log: string +} + +export interface ActionResponse { + message: string + value: string | number | boolean | null + copyable: boolean + qr: boolean +} + +export interface ServerMetrics { + [key: string]: { + [key: string]: { + value: string | number | null + unit?: string + } + } +} + +export interface DiskInfo { + [id: string]: DiskInfoEntry +} + +export interface DiskInfoEntry { + size: string + description: string | null + partitions: PartitionInfo +} + +export interface PartitionInfo { + [logicalname: string]: PartitionInfoEntry +} + +export interface PartitionInfoEntry { + 'is-mounted': boolean // We do not allow backups to mounted partitions + size: string | null + label: string | null +} + +export interface ServerSpecs { + [key: string]: string | number +} + +export interface SSHKeys { + [hash: string]: SSHKeyEntry +} + +export interface SSHKeyEntry { + alg: string + hostname: string + hash: string +} + +export type ServerNotifications = ServerNotification[] + +export interface ServerNotification { + id: string + 'package-id': string | null + 'created-at': string + code: T + level: NotificationLevel + title: string + message: string + data: NotificationData +} + +export enum NotificationLevel { + Success = 'success', + Info = 'info', + Warning = 'warning', + Error = 'error', +} + +export type NotificationData = T extends 0 ? null : + T extends 1 ? BackupReport : + any + +export interface BackupReport { + server: { + attempted: boolean + error: string | null + } + packages: { + [id: string]: { + error: string | null + } + } } diff --git a/ui/src/app/services/api/api.service.factory.ts b/ui/src/app/services/api/api.service.factory.ts index 12a07ef7b..35066020e 100644 --- a/ui/src/app/services/api/api.service.factory.ts +++ b/ui/src/app/services/api/api.service.factory.ts @@ -1,14 +1,12 @@ import { HttpService } from '../http.service' -import { AppModel } from '../../models/app-model' import { MockApiService } from './mock-api.service' import { LiveApiService } from './live-api.service' -import { ServerModel } from 'src/app/models/server-model' import { ConfigService } from '../config.service' -export function ApiServiceFactory (config: ConfigService, http: HttpService, appModel: AppModel, serverModel: ServerModel) { - if (config.api.useMocks) { - return new MockApiService(appModel, serverModel, config) +export function ApiServiceFactory (config: ConfigService, http: HttpService) { + if (config.api.mocks) { + return new MockApiService(config) } else { - return new LiveApiService(http, appModel, serverModel, config) + return new LiveApiService(http, config) } } diff --git a/ui/src/app/services/api/api.service.ts b/ui/src/app/services/api/api.service.ts index 7797d96f7..66ff2e5c9 100644 --- a/ui/src/app/services/api/api.service.ts +++ b/ui/src/app/services/api/api.service.ts @@ -1,124 +1,209 @@ -import { Rules } from '../../models/app-model' -import { AppAvailablePreview, AppAvailableFull, AppInstalledPreview, AppInstalledFull, DependentBreakage, AppAvailableVersionSpecificInfo, ServiceAction } from '../../models/app-types' -import { S9Notification, SSHFingerprint, ServerMetrics, DiskInfo } from '../../models/server-model' import { Subject, Observable } from 'rxjs' -import { Unit, ApiServer, ApiAppInstalledFull, ApiAppConfig, ApiAppAvailableFull, ApiAppInstalledPreview, V1Status } from './api-types' -import { AppMetrics, AppMetricsVersioned } from 'src/app/util/metrics.util' -import { ConfigSpec } from 'src/app/app-config/config-types' +import { Http, Source, Update, Operation, Revision } from 'patch-db-client' +import { RR } from './api-types' +import { DataModel } from 'src/app/models/patch-db/data-model' +import { filter } from 'rxjs/operators' +import * as uuid from 'uuid' -export abstract class ApiService { - private $unauthorizedApiResponse$: Subject<{ }> = new Subject() +export abstract class ApiService implements Source, Http { + protected readonly sync = new Subject>() + private syncing = true - watch401$ (): Observable<{ }> { - return this.$unauthorizedApiResponse$.asObservable() + /** PatchDb Source interface. Post/Patch requests provide a source of patches to the db. */ + // sequenceStream '_' is not used by the live api, but is overridden by the mock + watch$ (_?: Observable): Observable> { + return this.sync.asObservable().pipe(filter(() => this.syncing)) } - authenticatedRequestsEnabled: boolean = false + // used for determining internet connectivity + abstract ping (): Promise - protected received401 () { - this.authenticatedRequestsEnabled = false - this.$unauthorizedApiResponse$.next() + // for getting static files: ex icons, instructions, licenses + abstract getStatic (url: string): Promise + + // db + + abstract getRevisions (since: number): Promise + + abstract getDump (): Promise + + protected abstract setDbValueRaw (params: RR.SetDBValueReq): Promise + setDbValue = (params: RR.SetDBValueReq) => this.syncResponse( + () => this.setDbValueRaw(params), + )() + + // auth + + abstract submitPin (params: RR.SubmitPinReq): Promise + + abstract submitPassword (params: RR.SubmitPasswordReq): Promise + + abstract logout (params: RR.LogoutReq): Promise + + // server + + abstract getServerLogs (params: RR.GetServerLogsReq): Promise + + abstract getServerMetrics (params: RR.GetServerMetricsReq): Promise + + protected abstract updateServerRaw (params: RR.UpdateServerReq): Promise + updateServer = (params: RR.UpdateServerReq) => this.syncResponse( + () => this.updateServerRaw(params), + )() + + abstract restartServer (params: RR.UpdateServerReq): Promise + + abstract shutdownServer (params: RR.ShutdownServerReq): Promise + + // network + + abstract refreshLan (params: RR.RefreshLanReq): Promise + + // registry + + protected abstract setRegistryRaw (params: RR.SetRegistryReq): Promise + setRegistry = (params: RR.SetRegistryReq) => this.syncResponse( + () => this.setRegistryRaw(params), + )() + + // notification + + abstract getNotificationsRaw (params: RR.GetNotificationsReq): Promise + getNotifications = (params: RR.GetNotificationsReq) => this.syncResponse( + () => this.getNotificationsRaw(params), + )() + + abstract deleteNotification (params: RR.DeleteNotificationReq): Promise + + // wifi + + abstract addWifi (params: RR.AddWifiReq): Promise + + protected abstract connectWifiRaw (params: RR.ConnectWifiReq): Promise + connectWifi = (params: RR.ConnectWifiReq) => this.syncResponse( + () => this.connectWifiRaw(params), + )() + + protected abstract deleteWifiRaw (params: RR.DeleteWifiReq): Promise + deleteWifi = (params: RR.DeleteWifiReq) => this.syncResponse( + () => this.deleteWifiRaw(params), + )() + + // ssh + + abstract getSshKeys (params: RR.GetSSHKeysReq): Promise + + abstract addSshKey (params: RR.AddSSHKeyReq): Promise + + abstract deleteSshKey (params: RR.DeleteSSHKeyReq): Promise + + // backup + + protected abstract createBackupRaw (params: RR.CreateBackupReq): Promise + createBackup = (params: RR.CreateBackupReq) => this.syncResponse( + () => this.createBackupRaw(params), + )() + + protected abstract restoreBackupRaw (params: RR.RestoreBackupReq): Promise + restoreBackup = (params: RR.RestoreBackupReq) => this.syncResponse( + () => this.restoreBackupRaw(params), + )() + + // disk + + abstract getDisks (params: RR.GetDisksReq): Promise + + abstract ejectDisk (params: RR.EjectDisksReq): Promise + + // package + + abstract getPackageProperties (params: RR.GetPackagePropertiesReq): Promise['data']> + + abstract getPackageLogs (params: RR.GetPackageLogsReq): Promise + + protected abstract installPackageRaw (params: RR.InstallPackageReq): Promise + installPackage = (params: RR.InstallPackageReq) => this.syncResponse( + () => this.installPackageRaw(params), + )() + + abstract dryUpdatePackage (params: RR.DryUpdatePackageReq): Promise + + abstract getPackageConfig (params: RR.GetPackageConfigReq): Promise + + abstract drySetPackageConfig (params: RR.DrySetPackageConfigReq): Promise + + protected abstract setPackageConfigRaw (params: RR.SetPackageConfigReq): Promise + setPackageConfig = (params: RR.SetPackageConfigReq) => this.syncResponse( + () => this.setPackageConfigRaw(params), + )() + + protected abstract restorePackageRaw (params: RR.RestorePackageReq): Promise + restorePackage = (params: RR.RestorePackageReq) => this.syncResponse( + () => this.restorePackageRaw(params), + )() + + abstract executePackageAction (params: RR.ExecutePackageActionReq): Promise + + protected abstract startPackageRaw (params: RR.StartPackageReq): Promise + startPackage = (params: RR.StartPackageReq) => this.syncResponse( + () => this.startPackageRaw(params), + )() + + abstract dryStopPackage (params: RR.DryStopPackageReq): Promise + + protected abstract stopPackageRaw (params: RR.StopPackageReq): Promise + stopPackage = (params: RR.StopPackageReq) => this.syncResponse( + () => this.stopPackageRaw(params), + )() + + abstract dryRemovePackage (params: RR.DryRemovePackageReq): Promise + + protected abstract removePackageRaw (params: RR.RemovePackageReq): Promise + removePackage = (params: RR.RemovePackageReq) => this.syncResponse( + () => this.removePackageRaw(params), + )() + + abstract dryConfigureDependency (params: RR.DryConfigureDependencyReq): Promise + + // marketplace + + abstract getMarketplaceData (params: RR.GetMarketplaceDataReq): Promise + + abstract getEos (params: RR.GetMarketplaceEOSReq): Promise + + abstract getAvailableList (params: RR.GetAvailableListReq): Promise + + abstract getAvailableShow (params: RR.GetAvailableShowReq): Promise + + // Helper allowing quick decoration to sync the response patch and return the response contents. + // Pass in a tempUpdate function which returns a UpdateTemp corresponding to a temporary + // state change you'd like to enact prior to request and expired when request terminates. + private syncResponse Promise<{ response: T, revision?: Revision }>> (f: F, temp?: Operation): (...args: Parameters) => Promise { + return (...a) => { + let expireId = undefined + if (temp) { + expireId = uuid.v4() + this.sync.next({ patch: [temp], expiredBy: expireId }) + } + + return f(a).then(({ response, revision }) => { + if (revision) this.sync.next(revision) + return response + }) as any + } } - abstract testConnection (url: string): Promise - abstract getCheckAuth (): Promise // Throws an error on failed auth. - abstract postLogin (password: string): Promise // Throws an error on failed auth. - abstract postLogout (): Promise // Throws an error on failed auth. - abstract getServer (timeout?: number): Promise - abstract getVersionLatest (): Promise - abstract getServerMetrics (): Promise - abstract getNotifications (page: number, perPage: number): Promise - abstract deleteNotification (id: string): Promise - abstract toggleAppLAN (appId: string, toggle: 'enable' | 'disable'): Promise - abstract updateAgent (version: any): Promise - abstract acknowledgeOSWelcome (version: string): Promise - abstract getAvailableApps (): Promise - abstract getAvailableApp (appId: string): Promise - abstract getAvailableAppVersionSpecificInfo (appId: string, versionSpec: string): Promise - abstract getInstalledApp (appId: string): Promise - abstract getAppMetrics (appId: string): Promise - abstract getInstalledApps (): Promise - abstract getExternalDisks (): Promise - abstract getAppConfig (appId: string): Promise<{ spec: ConfigSpec, config: object, rules: Rules[] }> - abstract getAppLogs (appId: string, params?: ReqRes.GetAppLogsReq): Promise - abstract getServerLogs (): Promise - abstract installApp (appId: string, version: string, dryRun?: boolean): Promise - abstract uninstallApp (appId: string, dryRun?: boolean): Promise<{ breakages: DependentBreakage[] }> - abstract startApp (appId: string): Promise - abstract stopApp (appId: string, dryRun?: boolean): Promise<{ breakages: DependentBreakage[] }> - abstract restartApp (appId: string): Promise - abstract createAppBackup (appId: string, logicalname: string, password?: string): Promise - abstract restoreAppBackup (appId: string, logicalname: string, password?: string): Promise - abstract stopAppBackup (appId: string): Promise - abstract patchAppConfig (app: AppInstalledPreview, config: object, dryRun?: boolean): Promise<{ breakages: DependentBreakage[] }> - abstract postConfigureDependency (dependencyId: string, dependentId: string, dryRun?: boolean): Promise<{ config: object, breakages: DependentBreakage[] }> - abstract patchServerConfig (attr: string, value: any): Promise - abstract wipeAppData (app: AppInstalledPreview): Promise - abstract addSSHKey (sshKey: string): Promise - abstract deleteSSHKey (sshKey: SSHFingerprint): Promise - abstract addWifi (ssid: string, password: string, country: string, connect: boolean): Promise - abstract connectWifi (ssid: string): Promise - abstract deleteWifi (ssid: string): Promise - abstract restartServer (): Promise - abstract shutdownServer (): Promise - abstract ejectExternalDisk (logicalName: string): Promise - abstract serviceAction (appId: string, serviceAction: ServiceAction): Promise - abstract refreshLAN (): Promise - abstract checkV1Status (): Promise + // @TODO better types? + // private async process Promise<{ response: T, revision?: Revision }>> (f: F, temps: Operation[] = []): Promise { + // let expireId = undefined + // if (temps.length) { + // expireId = uuid.v4() + // this.sync.next({ patch: temps, expiredBy: expireId }) + // } + // const { response, revision } = await f({ ...f.arguments, expireId }) + // if (revision) this.sync.next(revision) + // return response + // } } - -export function isRpcFailure (arg: { error: Error } | { result: Result }): arg is { error: Error } { - return !!(arg as any).error -} - -export function isRpcSuccess (arg: { error: Error } | { result: Result }): arg is { result: Result } { - return !!(arg as any).result -} - -export module ReqRes { - export type GetVersionRes = { version: string } - export type PostLoginReq = { password: string } - export type PostLoginRes = Unit - export type ServiceActionRequest = { - jsonrpc: '2.0', - id: string, - method: string - } - export type ServiceActionResponse = { - jsonrpc: '2.0', - id: string - } & ({ error: { code: number, message: string } } | { result: string }) - export type GetCheckAuthRes = { } - export type GetServerRes = ApiServer - export type GetVersionLatestRes = { versionLatest: string, releaseNotes: string } - export type GetServerMetricsRes = ServerMetrics - export type GetAppAvailableRes = ApiAppAvailableFull - export type GetAppAvailableVersionInfoRes = AppAvailableVersionSpecificInfo - export type GetAppsAvailableRes = AppAvailablePreview[] - export type GetExternalDisksRes = DiskInfo[] - export type GetAppInstalledRes = ApiAppInstalledFull - export type GetAppConfigRes = ApiAppConfig - export type GetAppLogsReq = { after?: string, before?: string, page?: string, perPage?: string } - export type GetServerLogsReq = { } - export type GetAppLogsRes = string[] - export type GetServerLogsRes = string[] - export type GetAppMetricsRes = AppMetricsVersioned - export type GetAppsInstalledRes = ApiAppInstalledPreview[] - export type PostInstallAppReq = { version: string } - export type PostInstallAppRes = ApiAppInstalledFull & { breakages: DependentBreakage[] } - export type PostUpdateAgentReq = { version: string } - export type PostAppBackupCreateReq = { logicalname: string, password: string } - export type PostAppBackupCreateRes = Unit - export type PostAppBackupRestoreReq = { logicalname: string, password: string } - export type PostAppBackupRestoreRes = Unit - export type PostAppBackupStopRes = Unit - export type PatchAppConfigReq = { config: object } - export type PatchServerConfigReq = { value: string } - export type GetNotificationsReq = { page: string, perPage: string } - export type GetNotificationsRes = S9Notification[] - export type PostAddWifiReq = { ssid: string, password: string, country: string, skipConnect: boolean } - export type PostConnectWifiReq = { country: string } - export type PostAddSSHKeyReq = { sshKey: string } - export type PostAddSSHKeyRes = SSHFingerprint -} - +// used for type inference in syncResponse +type ExtractResultPromise> = T extends Promise ? Promise : any diff --git a/ui/src/app/services/api/live-api.service.ts b/ui/src/app/services/api/live-api.service.ts index e09652261..041f288ad 100644 --- a/ui/src/app/services/api/live-api.service.ts +++ b/ui/src/app/services/api/live-api.service.ts @@ -1,338 +1,223 @@ import { Injectable } from '@angular/core' -import { HttpService, Method, HttpOptions } from '../http.service' -import { AppModel, AppStatus } from '../../models/app-model' -import { AppAvailablePreview, AppAvailableFull, AppInstalledFull, AppInstalledPreview, DependentBreakage, AppAvailableVersionSpecificInfo, ServiceAction } from '../../models/app-types' -import { S9Notification, SSHFingerprint, ServerModel, DiskInfo } from '../../models/server-model' -import { ApiService, ReqRes } from './api.service' -import { ApiAppInstalledPreview, ApiServer, Unit, V1Status } from './api-types' -import { HttpErrorResponse } from '@angular/common/http' -import { isUnauthorized } from 'src/app/util/web.util' -import { Replace } from 'src/app/util/types.util' -import { AppMetrics, parseMetricsPermissive } from 'src/app/util/metrics.util' -import { modulateTime } from 'src/app/util/misc.util' -import { Observable, of, throwError } from 'rxjs' -import { catchError, mapTo } from 'rxjs/operators' -import * as uuid from 'uuid' +import { HttpService, Method } from '../http.service' +import { ApiService } from './api.service' +import { RR } from './api-types' +import { parsePropertiesPermissive } from 'src/app/util/properties.util' import { ConfigService } from '../config.service' @Injectable() export class LiveApiService extends ApiService { constructor ( private readonly http: HttpService, - // TODO remove app + server model from here. updates to state should be done in a separate class wrapping ApiService + App/ServerModel - private readonly appModel: AppModel, - private readonly serverModel: ServerModel, private readonly config: ConfigService, ) { super() } - testConnection (url: string): Promise { - return this.http.raw.get(url).pipe(mapTo(true as true), catchError(e => catchHttpStatusError(e))).toPromise() + async ping (): Promise { + return this.http.rpcRequest({ method: 'ping', params: { } }) } - // Used to check whether password or key is valid. If so, it will be used implicitly by all other calls. - async getCheckAuth (): Promise { - return this.http.serverRequest({ method: Method.GET, url: '/authenticate' }, { version: '' }) + async getStatic (url: string): Promise { + return this.http.httpRequest({ method: Method.GET, url }) } - async postLogin (password: string): Promise { - return this.http.serverRequest({ method: Method.POST, url: '/auth/login', data: { password } }, { version: '' }) + // db + + async getRevisions (since: number): Promise { + return this.http.rpcRequest({ method: 'db.revisions', params: { since } }) } - async postLogout (): Promise { - return this.http.serverRequest({ method: Method.POST, url: '/auth/logout' }, { version: '' }).then(() => { this.authenticatedRequestsEnabled = false; return { } }) + async getDump (): Promise { + return this.http.rpcRequest({ method: 'db.dump' }) } - async getServer (timeout?: number): Promise { - return this.authRequest({ method: Method.GET, url: '/', readTimeout: timeout }) + async setDbValueRaw (params: RR.SetDBValueReq): Promise { + return this.http.rpcRequest({ method: 'db.put.ui', params }) } - async acknowledgeOSWelcome (version: string): Promise { - return this.authRequest({ method: Method.POST, url: `/welcome/${version}` }) + // auth + + async submitPin (params: RR.SubmitPinReq): Promise { + return this.http.rpcRequest({ method: 'auth.pin', params }) } - async getVersionLatest (): Promise { - return this.authRequest({ method: Method.GET, url: '/versionLatest' }, { version: '' }) + async submitPassword (params: RR.SubmitPasswordReq): Promise { + return this.http.rpcRequest({ method: 'auth.password', params }) } - async getServerMetrics (): Promise { - return this.authRequest({ method: Method.GET, url: `/metrics` }) + async logout (params: RR.LogoutReq): Promise { + return this.http.rpcRequest({ method: 'auth.logout', params }) } - async getNotifications (page: number, perPage: number): Promise { - const params: ReqRes.GetNotificationsReq = { - page: String(page), - perPage: String(perPage), - } - return this.authRequest({ method: Method.GET, url: `/notifications`, params }) + // server + + async getServerLogs (params: RR.GetServerLogsReq): Promise { + return this.http.rpcRequest( { method: 'server.logs', params }) } - async deleteNotification (id: string): Promise { - return this.authRequest({ method: Method.DELETE, url: `/notifications/${id}` }) + async getServerMetrics (params: RR.GetServerMetricsReq): Promise { + return this.http.rpcRequest({ method: 'server.metrics', params }) } - async getExternalDisks (): Promise { - return this.authRequest({ method: Method.GET, url: `/disks` }) + async updateServerRaw (params: RR.UpdateServerReq): Promise { + return this.http.rpcRequest({ method: 'server.update', params }) } - // TODO: EJECT-DISKS - async ejectExternalDisk (logicalName: string): Promise { - return this.authRequest({ method: Method.POST, url: `/disks/eject`, data: { logicalName } }) + async restartServer (params: RR.RestartServerReq): Promise { + return this.http.rpcRequest({ method: 'server.restart', params }) } - async updateAgent (version: string): Promise { - const data: ReqRes.PostUpdateAgentReq = { - version: `=${version}`, - } - return this.authRequest({ method: Method.POST, url: '/update', data }) + async shutdownServer (params: RR.ShutdownServerReq): Promise { + return this.http.rpcRequest({ method: 'server.shutdown', params }) } - async getAvailableAppVersionSpecificInfo (appId: string, versionSpec: string): Promise { - return this - .authRequest>({ method: Method.GET, url: `/apps/${appId}/store/${versionSpec}` }) - .then(res => ({ ...res, versionViewing: res.version })) - .then(res => { - delete res['version'] - return res - }) + // network + + async refreshLan (params: RR.RefreshLanReq): Promise { + return this.http.rpcRequest({ method: 'network.lan.refresh', params }) } - async getAvailableApps (): Promise { - const res = await this.authRequest({ method: Method.GET, url: '/apps/store' }) - return res.map(a => { - const latestVersionTimestamp = new Date(a.latestVersionTimestamp) - if (isNaN(latestVersionTimestamp as any)) throw new Error(`Invalid latestVersionTimestamp ${a.latestVersionTimestamp}`) - return { ...a, latestVersionTimestamp } - }) + // registry + + async setRegistryRaw (params: RR.SetRegistryReq): Promise { + return this.http.rpcRequest({ method: 'registry.set', params }) } - async getAvailableApp (appId: string): Promise { - return this.authRequest({ method: Method.GET, url: `/apps/${appId}/store` }) - .then(res => { - return { - ...res, - versionViewing: res.versionLatest, - } - }) + // notification + + async getNotificationsRaw (params: RR.GetNotificationsReq): Promise { + return this.http.rpcRequest({ method: 'notifications.list', params }) } - async getInstalledApp (appId: string): Promise { - return this.authRequest({ method: Method.GET, url: `/apps/${appId}/installed` }) - .then(app => { - return { - ...app, - hasFetchedFull: true, - hasUI: this.config.hasUI(app), - launchable: this.config.isLaunchable(app), - } - }) + async deleteNotification (params: RR.DeleteNotificationReq): Promise { + return this.http.rpcRequest({ method: 'notifications.delete', params }) } - async getInstalledApps (): Promise { - return this.authRequest({ method: Method.GET, url: `/apps/installed` }) - .then(apps => { - return apps.map(app => { - return { - ...app, - hasUI: this.config.hasUI(app), - launchable: this.config.isLaunchable(app), - } - }) - }) + // wifi + + async addWifi (params: RR.AddWifiReq): Promise { + return this.http.rpcRequest({ method: 'wifi.add', params }) } - async getAppConfig (appId: string): Promise { - return this.authRequest({ method: Method.GET, url: `/apps/${appId}/config` }) + async connectWifiRaw (params: RR.ConnectWifiReq): Promise { + return this.http.rpcRequest({ method: 'wifi.connect', params }) } - async getAppLogs (appId: string, params: ReqRes.GetAppLogsReq = { }): Promise { - return this.authRequest({ method: Method.GET, url: `/apps/${appId}/logs`, params: params as any }) + async deleteWifiRaw (params: RR.DeleteWifiReq): Promise { + return this.http.rpcRequest({ method: 'wifi.delete', params }) } - async getServerLogs (): Promise { - return this.authRequest({ method: Method.GET, url: `/logs` }) + // ssh + + async getSshKeys (params: RR.GetSSHKeysReq): Promise { + return this.http.rpcRequest({ method: 'ssh.get', params }) } - async getAppMetrics (appId: string): Promise { - return this.authRequest({ method: Method.GET, url: `/apps/${appId}/metrics` }) - .then(parseMetricsPermissive) + async addSshKey (params: RR.AddSSHKeyReq): Promise { + return this.http.rpcRequest({ method: 'ssh.add', params }) } - async installApp (appId: string, version: string, dryRun: boolean = false): Promise { - const data: ReqRes.PostInstallAppReq = { - version, - } - return this.authRequest({ method: Method.POST, url: `/apps/${appId}/install${dryRunParam(dryRun, true)}`, data }) - .then(app => { - return { - ...app, - hasFetchedFull: false, - hasUI: this.config.hasUI(app), - launchable: this.config.isLaunchable(app), - } - }) + async deleteSshKey (params: RR.DeleteSSHKeyReq): Promise { + return this.http.rpcRequest({ method: 'ssh.delete', params }) } - async uninstallApp (appId: string, dryRun: boolean = false): Promise<{ breakages: DependentBreakage[] }> { - return this.authRequest({ method: Method.POST, url: `/apps/${appId}/uninstall${dryRunParam(dryRun, true)}`, readTimeout: 60000 }) + // backup + + async createBackupRaw (params: RR.CreateBackupReq): Promise { + return this.http.rpcRequest({ method: 'backup.create', params }) } - async startApp (appId: string): Promise { - return this.authRequest({ method: Method.POST, url: `/apps/${appId}/start`, readTimeout: 60000 }) - .then(() => this.appModel.update({ id: appId, status: AppStatus.RUNNING })) - .then(() => ({ })) + async restoreBackupRaw (params: RR.RestoreBackupReq): Promise { + return this.http.rpcRequest({ method: 'backup.restore', params }) } - async stopApp (appId: string, dryRun: boolean = false): Promise<{ breakages: DependentBreakage[] }> { - const res = await this.authRequest<{ breakages: DependentBreakage[] }>({ method: Method.POST, url: `/apps/${appId}/stop${dryRunParam(dryRun, true)}`, readTimeout: 60000 }) - if (!dryRun) this.appModel.update({ id: appId, status: AppStatus.STOPPING }, modulateTime(new Date(), 5, 'seconds')) - return res + // disk + + getDisks (params: RR.GetDisksReq): Promise { + return this.http.rpcRequest({ method: 'disk.list', params }) } - async restartApp (appId: string): Promise { - return this.authRequest({ method: Method.POST, url: `/apps/${appId}/restart`, readTimeout: 60000 }) - .then(() => ({ } as any)) + ejectDisk (params: RR.EjectDisksReq): Promise { + return this.http.rpcRequest({ method: 'disk.eject', params }) } - async createAppBackup (appId: string, logicalname: string, password?: string): Promise { - const data: ReqRes.PostAppBackupCreateReq = { - password: password || undefined, - logicalname, - } - return this.authRequest({ method: Method.POST, url: `/apps/${appId}/backup`, data, readTimeout: 60000 }) - .then(() => this.appModel.update({ id: appId, status: AppStatus.CREATING_BACKUP })) - .then(() => ({ })) + // package + + async getPackageProperties (params: RR.GetPackagePropertiesReq): Promise['data']> { + return this.http.rpcRequest({ method: 'package.properties', params }) + .then(parsePropertiesPermissive) } - async stopAppBackup (appId: string): Promise { - return this.authRequest({ method: Method.POST, url: `/apps/${appId}/backup/stop`, readTimeout: 60000 }) - .then(() => this.appModel.update({ id: appId, status: AppStatus.STOPPED })) - .then(() => ({ })) + async getPackageLogs (params: RR.GetPackageLogsReq): Promise { + return this.http.rpcRequest( { method: 'package.logs', params }) } - async restoreAppBackup (appId: string, logicalname: string, password?: string): Promise { - const data: ReqRes.PostAppBackupRestoreReq = { - password: password || undefined, - logicalname, - } - return this.authRequest({ method: Method.POST, url: `/apps/${appId}/backup/restore`, data, readTimeout: 60000 }) - .then(() => this.appModel.update({ id: appId, status: AppStatus.RESTORING_BACKUP })) - .then(() => ({ })) + async installPackageRaw (params: RR.InstallPackageReq): Promise { + return this.http.rpcRequest({ method: 'package.install', params }) } - async patchAppConfig (app: AppInstalledPreview, config: object, dryRun = false): Promise<{ breakages: DependentBreakage[] }> { - const data: ReqRes.PatchAppConfigReq = { - config, - } - return this.authRequest({ method: Method.PATCH, url: `/apps/${app.id}/config${dryRunParam(dryRun, true)}`, data, readTimeout: 60000 }) + async dryUpdatePackage (params: RR.DryUpdatePackageReq): Promise { + return this.http.rpcRequest({ method: 'package.update.dry', params }) } - async postConfigureDependency (dependencyId: string, dependentId: string, dryRun?: boolean): Promise<{ config: object, breakages: DependentBreakage[] }> { - return this.authRequest({ method: Method.POST, url: `/apps/${dependencyId}/autoconfig/${dependentId}${dryRunParam(dryRun, true)}`, readTimeout: 60000 }) + async getPackageConfig (params: RR.GetPackageConfigReq): Promise { + return this.http.rpcRequest({ method: 'package.config.get', params }) } - async patchServerConfig (attr: string, value: any): Promise { - const data: ReqRes.PatchServerConfigReq = { - value, - } - return this.authRequest({ method: Method.PATCH, url: `/${attr}`, data, readTimeout: 60000 }) - .then(() => this.serverModel.update({ [attr]: value })) - .then(() => ({ })) + async drySetPackageConfig (params: RR.DrySetPackageConfigReq): Promise { + return this.http.rpcRequest({ method: 'package.config.set.dry', params }) } - async wipeAppData (app: AppInstalledPreview): Promise { - return this.authRequest({ method: Method.POST, url: `/apps/${app.id}/wipe`, readTimeout: 60000 }).then((res) => { - this.appModel.update({ id: app.id, status: AppStatus.NEEDS_CONFIG }) - return res - }) + async setPackageConfigRaw (params: RR.SetPackageConfigReq): Promise { + return this.http.rpcRequest({ method: 'package.config.set', params }) } - async toggleAppLAN (appId: string, toggle: 'enable' | 'disable'): Promise { - return this.authRequest({ method: Method.POST, url: `/apps/${appId}/lan/${toggle}` }) + async restorePackageRaw (params: RR.RestorePackageReq): Promise { + return this.http.rpcRequest({ method: 'package.restore', params }) } - async addSSHKey (sshKey: string): Promise { - const data: ReqRes.PostAddSSHKeyReq = { - sshKey, - } - const fingerprint = await this.authRequest({ method: Method.POST, url: `/sshKeys`, data }) - this.serverModel.update({ ssh: [...this.serverModel.peek().ssh, fingerprint] }) - return { } + async executePackageAction (params: RR.ExecutePackageActionReq): Promise { + return this.http.rpcRequest({ method: 'package.action', params }) } - async addWifi (ssid: string, password: string, country: string, connect: boolean): Promise { - const data: ReqRes.PostAddWifiReq = { - ssid, - password, - country, - skipConnect: !connect, - } - return this.authRequest({ method: Method.POST, url: `/wifi`, data }) + async startPackageRaw (params: RR.StartPackageReq): Promise { + return this.http.rpcRequest({ method: 'package.start', params }) } - async connectWifi (ssid: string): Promise { - return this.authRequest({ method: Method.POST, url: encodeURI(`/wifi/${ssid}`) }) + async dryStopPackage (params: RR.DryStopPackageReq): Promise { + return this.http.rpcRequest({ method: 'package.stop.dry', params }) } - async deleteWifi (ssid: string): Promise { - return this.authRequest({ method: Method.DELETE, url: encodeURI(`/wifi/${ssid}`) }) + async stopPackageRaw (params: RR.StopPackageReq): Promise { + return this.http.rpcRequest({ method: 'package.stop', params }) } - async deleteSSHKey (fingerprint: SSHFingerprint): Promise { - await this.authRequest({ method: Method.DELETE, url: `/sshKeys/${fingerprint.hash}` }) - const ssh = this.serverModel.peek().ssh - this.serverModel.update({ ssh: ssh.filter(s => s !== fingerprint) }) - return { } + async dryRemovePackage (params: RR.DryRemovePackageReq): Promise { + return this.http.rpcRequest({ method: 'package.remove.dry', params }) } - async restartServer (): Promise { - return this.authRequest({ method: Method.POST, url: '/restart', readTimeout: 60000 }) + async removePackageRaw (params: RR.RemovePackageReq): Promise { + return this.http.rpcRequest({ method: 'package.remove', params }) } - async shutdownServer (): Promise { - return this.authRequest({ method: Method.POST, url: '/shutdown', readTimeout: 60000 }) + async dryConfigureDependency (params: RR.DryConfigureDependencyReq): Promise { + return this.http.rpcRequest({ method: 'package.dependency.configure.dry', params }) } - async serviceAction (appId: string, s: ServiceAction): Promise { - const data: ReqRes.ServiceActionRequest = { - jsonrpc: '2.0', - id: uuid.v4(), - method: s.id, - } - return this.authRequest({ method: Method.POST, url: `/apps/${appId}/actions`, data, readTimeout: 300000 }) + // marketplace + + async getMarketplaceData (params: RR.GetMarketplaceDataReq): Promise { + return this.http.rpcRequest({ method: 'marketplace.data', params }) } - async refreshLAN (): Promise { - return this.authRequest({ method: Method.POST, url: '/network/lan/reset' }) + async getEos (params: RR.GetMarketplaceEOSReq): Promise { + return this.http.rpcRequest({ method: 'marketplace.eos', params }) } - async checkV1Status (): Promise { - return this.http.request({ method: Method.GET, url: 'https://registry.start9labs.com/sys/status' }) + async getAvailableList (params: RR.GetAvailableListReq): Promise { + return this.http.rpcRequest({ method: 'marketplace.available.list', params }) } - private async authRequest (opts: HttpOptions, overrides: Partial<{ version: string }> = { }): Promise { - if (!this.authenticatedRequestsEnabled) throw new Error(`Authenticated requests are not enabled. Do you need to login?`) - - opts.withCredentials = true - return this.http.serverRequest(opts, overrides).catch((e: HttpError) => { - console.log(`Got a server error!`, e) - if (isUnauthorized(e)) this.received401() - throw e - }) - } -} - -type HttpError = HttpErrorResponse & { error: { code: string, message: string } } - -const dryRunParam = (dryRun: boolean, first: boolean) => { - if (!dryRun) return '' - return first ? `?dryrun` : `&dryrun` -} - -function catchHttpStatusError (error: HttpErrorResponse): Observable { - if (error.error instanceof ErrorEvent) { - // A client-side or network error occurred. Handle it accordingly. - return throwError('Not Connected') - } else { - return of(true) + async getAvailableShow (params: RR.GetAvailableShowReq): Promise { + return this.http.rpcRequest({ method: 'marketplace.available', params }) } } diff --git a/ui/src/app/services/api/md-sample.md b/ui/src/app/services/api/md-sample.md index 7417c4444..e7f08d284 100644 --- a/ui/src/app/services/api/md-sample.md +++ b/ui/src/app/services/api/md-sample.md @@ -1,8 +1,5 @@ # Size Limit [![Cult Of Martians][cult-img]][cult] -Size Limit logo by Anton Lovchikov - Size Limit is a performance budget tool for JavaScript. It checks every commit on CI, calculates the real cost of your JS for end-users and throws an error if the cost exceeds the limit. @@ -159,192 +156,6 @@ interactive elements, using React/Vue/Svelte lib or vanilla JS. - -### Big Libraries - -JS libraries > 10 KB in size. - -This preset includes headless Chrome, and will measure your lib’s execution -time. You likely don’t need this overhead for a small 2 KB lib, but for larger -ones the execution time is a more accurate and understandable metric that -the size in bytes. Library like [React] is a good example for this preset. - -
Show instructions - -1. Install preset: - - ```sh - $ npm install --save-dev size-limit @size-limit/preset-big-lib - ``` - -2. Add the `size-limit` section and the `size` script to your `package.json`: - - ```diff - + "size-limit": [ - + { - + "path": "dist/react.production-*.js" - + } - + ], - "scripts": { - "build": "webpack ./scripts/rollup/build.js", - + "size": "npm run build && size-limit", - "test": "jest && eslint ." - } - ``` - -3. If you use ES modules you can test the size after tree-shaking with `import` - option: - - ```diff - "size-limit": [ - { - "path": "dist/react.production-*.js", - + "import": "{ createComponent }" - } - ], - ``` - -4. Here’s how you can get the size for your current project: - - ```sh - $ npm run size - - Package size: 30.08 KB with all dependencies, minified and gzipped - Loading time: 602 ms on slow 3G - Running time: 214 ms on Snapdragon 410 - Total time: 815 ms - ``` - -5. Now, let’s set the limit. Add 25% to the current total time and use that - as the limit in your `package.json`: - - ```diff - "size-limit": [ - { - + "limit": "1 s", - "path": "dist/react.production-*.js" - } - ], - ``` - -6. Add a `size` script to your test suite: - - ```diff - "scripts": { - "build": "rollup ./scripts/rollup/build.js", - "size": "npm run build && size-limit", - - "test": "jest && eslint ." - + "test": "jest && eslint . && npm run size" - } - ``` - -7. If you don’t have a continuous integration service running, don’t forget - to add one — start with [Travis CI]. -8. Add the library size to docs, it will help users to choose your project: - - ```diff - # Project Name - - Short project description - - * **Fast.** 10% faster than competitor. - + * **Small.** 15 KB (minified and gzipped). - + [Size Limit](https://github.com/ai/size-limit) controls the size. - ``` - -
- - -### Small Libraries - -JS libraries < 10 KB in size. - -This preset will only measure the size, without the execution time, so it’s -suitable for small libraries. If your library is larger, you likely want -the Big Libraries preset above. [Nano ID] or [Storeon] are good examples -for this preset. - -
Show instructions - -1. First, install `size-limit`: - - ```sh - $ npm install --save-dev size-limit @size-limit/preset-small-lib - ``` - -2. Add the `size-limit` section and the `size` script to your `package.json`: - - ```diff - + "size-limit": [ - + { - + "path": "index.js" - + } - + ], - "scripts": { - + "size": "size-limit", - "test": "jest && eslint ." - } - ``` - -3. Here’s how you can get the size for your current project: - - ```sh - $ npm run size - - Package size: 177 B with all dependencies, minified and gzipped - ``` - -4. If your project size starts to look bloated, run `--why` for analysis: - - ```sh - $ npm run size -- --why - ``` - -5. Now, let’s set the limit. Determine the current size of your library, - add just a little bit (a kilobyte, maybe) and use that as the limit - in your `package.json`: - - ```diff - "size-limit": [ - { - + "limit": "9 KB", - "path": "index.js" - } - ], - ``` - -6. Add the `size` script to your test suite: - - ```diff - "scripts": { - "size": "size-limit", - - "test": "jest && eslint ." - + "test": "jest && eslint . && npm run size" - } - ``` - -7. If you don’t have a continuous integration service running, don’t forget - to add one — start with [Travis CI]. -8. Add the library size to docs, it will help users to choose your project: - - ```diff - # Project Name - - Short project description - - * **Fast.** 10% faster than competitor. - + * **Small.** 500 bytes (minified and gzipped). No dependencies. - + [Size Limit](https://github.com/ai/size-limit) controls the size. - ``` - -
- -[Travis CI]: https://github.com/dwyl/learn-travis -[Storeon]: https://github.com/ai/storeon/ -[Nano ID]: https://github.com/ai/nanoid/ -[React]: https://github.com/facebook/react/ - - ## Reports Size Limit has a [GitHub action] that comments and rejects pull requests based @@ -371,99 +182,6 @@ jobs: github_token: ${{ secrets.GITHUB_TOKEN }} ``` - -## Config - -Size Limits supports three ways to define config. - -1. `size-limit` section in `package.json`: - - ```json - "size-limit": [ - { - "path": "index.js", - "import": "{ createStore }", - "limit": "500 ms" - } - ] - ``` - -2. or a separate `.size-limit.json` config file: - - ```js - [ - { - "path": "index.js", - "import": "{ createStore }", - "limit": "500 ms" - } - ] - ``` - -3. or a more flexible `.size-limit.js` config file: - - ```js - module.exports = [ - { - path: "index.js", - import: "{ createStore }", - limit: "500 ms" - } - ] - ``` - -Each section in the config can have these options: - -* **path**: relative paths to files. The only mandatory option. - It could be a path `"index.js"`, a [pattern] `"dist/app-*.js"` - or an array `["index.js", "dist/app-*.js", "!dist/app-exclude.js"]`. -* **import**: partial import to test tree-shaking. It could be `"{ lib }"` - to test `import { lib } from 'lib'` or `{ "a.js": "{ a }", "b.js": "{ b }" }` - to test multiple files. -* **limit**: size or time limit for files from the `path` option. It should be - a string with a number and unit, separated by a space. - Format: `100 B`, `10 KB`, `500 ms`, `1 s`. -* **name**: the name of the current section. It will only be useful - if you have multiple sections. -* **entry**: when using a custom webpack config, a webpack entry could be given. - It could be a string or an array of strings. - By default, the total size of all entry points will be checked. -* **webpack**: with `false` it will disable webpack. -* **running**: with `false` it will disable calculating running time. -* **gzip**: with `false` it will disable gzip compression. -* **brotli**: with `true` it will use brotli compression and disable gzip compression. -* **config**: a path to a custom webpack config. -* **ignore**: an array of files and dependencies to exclude from - the project size calculation. - -If you use Size Limit to track the size of CSS files, make sure to set -`webpack: false`. Otherwise, you will get wrong numbers, because webpack -inserts `style-loader` runtime (≈2 KB) into the bundle. - -[pattern]: https://github.com/sindresorhus/globby#globbing-patterns - - -## Plugins and Presets - -Plugins: - -* `@size-limit/file` checks the size of files with Gzip, Brotli - or without compression. -* `@size-limit/webpack` adds your library to empty webpack project - and prepares bundle file for `file` plugin. -* `@size-limit/time` uses headless Chrome to track time to execute JS. -* `@size-limit/dual-publish` compiles files to ES modules with [`dual-publish`] - to check size after tree-shaking. - -Plugin presets: - -* `@size-limit/preset-app` contains `file` and `time` plugins. -* `@size-limit/preset-big-lib` contains `webpack`, `file`, and `time` plugins. -* `@size-limit/preset-small-lib` contains `webpack` and `file` plugins. - -[`dual-publish`]: https://github.com/ai/dual-publish - - ## JS API ```js diff --git a/ui/src/app/services/api/mock-api.service.ts b/ui/src/app/services/api/mock-api.service.ts index 997fa129e..d04697f50 100644 --- a/ui/src/app/services/api/mock-api.service.ts +++ b/ui/src/app/services/api/mock-api.service.ts @@ -1,1287 +1,509 @@ import { Injectable } from '@angular/core' -import { AppStatus, AppModel } from '../../models/app-model' -import { AppAvailablePreview, AppAvailableFull, AppInstalledPreview, AppInstalledFull, DependentBreakage, AppAvailableVersionSpecificInfo, ServiceAction } from '../../models/app-types' -import { S9Notification, SSHFingerprint, ServerStatus, ServerModel, DiskInfo } from '../../models/server-model' import { pauseFor } from '../../util/misc.util' -import { ApiService, ReqRes } from './api.service' -import { ApiAppInstalledFull, ApiAppInstalledPreview, ApiServer, Unit as EmptyResponse, Unit, V1Status } from './api-types' -import { AppMetrics, AppMetricsVersioned, parseMetricsPermissive } from 'src/app/util/metrics.util' -import { mockApiAppAvailableFull, mockApiAppAvailableVersionInfo, mockApiAppInstalledFull, mockAppDependentBreakages, toInstalledPreview } from './mock-app-fixures' +import { ApiService } from './api.service' +import { Observable } from 'rxjs' +import { PatchOp, Update } from 'patch-db-client' +import { DataModel, PackageDataEntry, PackageMainStatus, PackageState, ServerStatus } from 'src/app/models/patch-db/data-model' import { ConfigService } from '../config.service' +import { RR } from './api-types' +import { parsePropertiesPermissive } from 'src/app/util/properties.util' +import { Mock } from './mock-app-fixures' -//@TODO consider moving to test folders. @Injectable() export class MockApiService extends ApiService { + sequence = 0 welcomeAck = false constructor ( - private readonly appModel: AppModel, - private readonly serverModel: ServerModel, private readonly config: ConfigService, - ) { - super() + ) { super() } + + // every time a patch is returned from the mock, we override its sequence to be 1 more than the last sequence in the patch-db as provided by `o`. + watch$ (sequenceStream: Observable): Observable> { + sequenceStream.subscribe(i => this.sequence < i ? (this.sequence = i) : { }) + return super.watch$() } - async postLogin () : Promise { - return { } + async ping (): Promise { + console.log('pinging server') + return } - async postLogout () : Promise { - return { } + async getStatic (url: string): Promise { + return Mock.DbDump.value['package-data']['bitcoind']['static-files'].instructions } - async postConfigureDependency (dependencyId: string, dependentId: string, dryRun?: boolean): Promise<{ config: object, breakages: DependentBreakage[] }> { + // db + + async getRevisions (since: number): Promise { await pauseFor(2000) - throw new Error ('some misc backend error ohh we forgot to make this endpoint or something') - } - - async getServer (): Promise { - const res = await mockGetServer() return { - ...res, - welcomeAck: this.welcomeAck, + ...Mock.DbDump, + id: this.nextSequence(), } } - testCounter = 0 - async testConnection (): Promise { - console.log('testing connection') - this.testCounter ++ - await pauseFor(500) - if (this.testCounter > 2) { - return true - } else { - throw new Error('Not Connected') - } - } - - async ejectExternalDisk (): Promise { + async getDump (): Promise { await pauseFor(2000) - return { } + return { + ...Mock.DbDump, + id: this.nextSequence(), + } } - async getCheckAuth (): Promise { - return { } - } - - async getVersionLatest (): Promise { - return mockGetVersionLatest() - } - - async getServerMetrics (): Promise { - return mockGetServerMetrics() - } - - async getNotifications (page: number, perPage: number): Promise { - return mockGetNotifications() - } - - async deleteNotification (id: string): Promise { - return mockDeleteNotification() - } - - async getExternalDisks (): Promise { - return mockGetExternalDisks() - } - - async updateAgent (thing: any): Promise { - return mockPostUpdateAgent() - } - - async getAvailableApps (): Promise { - return mockGetAvailableApps() - } - - async getAvailableApp (appId: string): Promise { - // throw new Error('Some horrible horrible error message gosh its awful') - return mockGetAvailableApp(appId) - .then(res => { - return { - ...res, - versionViewing: res.versionLatest, - } - }) - } - - async getAvailableAppVersionSpecificInfo (appId: string, versionSpec: string): Promise { - return mockGetAvailableAppVersionInfo() - } - - async getInstalledApp (appId: string): Promise { - return mockGetInstalledApp(appId) - .then(app => { - return { - ...app, - hasFetchedFull: false, - hasUI: this.hasUI(app), - launchable: this.isLaunchable(app), - } - }) - } - - async getAppMetrics (appId: string): Promise { - return mockGetAppMetrics().then(parseMetricsPermissive) - } - - async getInstalledApps (): Promise { - return mockGetInstalledApps() - .then(apps => { - return apps.map(app => { - return { - ...app, - hasUI: this.hasUI(app), - launchable: this.isLaunchable(app), - } - }) - }) - } - - async getAppConfig (appId: string): Promise { - return mockGetAppConfig() - } - - async getAppLogs (appId: string, params: ReqRes.GetAppLogsReq = { }): Promise { - return mockGetAppLogs() - } - - async getServerLogs (): Promise { - return mockGetServerLogs() - } - - async installApp (appId: string, version: string, dryRun: boolean): Promise { - return mockInstallApp(appId) - .then(app => { - return { - ...app, - hasFetchedFull: true, - hasUI: this.hasUI(app), - launchable: this.isLaunchable(app), - } - }) - } - - async uninstallApp (appId: string, dryRun: boolean): Promise<{ breakages: DependentBreakage[] }> { - return mockUninstallApp() - } - - async acknowledgeOSWelcome (version: string) { + async setDbValueRaw (params: RR.SetDBValueReq): Promise { await pauseFor(2000) - this.welcomeAck = true - return { } - } - - async startApp (appId: string): Promise { - console.log('start app mock') - await mockStartApp() - this.appModel.update({ id: appId, status: AppStatus.RUNNING }) - return { } - } - - async stopApp (appId: string, dryRun = false): Promise<{ breakages: DependentBreakage[] }> { - await mockStopApp() - if (!dryRun) this.appModel.update({ id: appId, status: AppStatus.STOPPED }) - return mockAppDependentBreakages - } - - async toggleAppLAN (appId: string, toggle: 'enable' | 'disable'): Promise { - return { } - } - - async restartApp (appId: string): Promise { - return { } - } - - async createAppBackup (appId: string, logicalname: string, password = ''): Promise { - await mockCreateAppBackup() - this.appModel.update({ id: appId, status: AppStatus.CREATING_BACKUP }) - return { } - } - - async stopAppBackup (appId: string): Promise { - await mockStopAppBackup() - this.appModel.update({ id: appId, status: AppStatus.STOPPED }) - return { } - } - - async restoreAppBackup (appId: string, logicalname: string, password?: string): Promise { - await mockCreateAppBackup() - this.appModel.update({ id: appId, status: AppStatus.RESTORING_BACKUP }) - return { } - } - - async patchAppConfig (app: AppInstalledPreview, config: object, dryRun?: boolean): Promise<{ breakages: DependentBreakage[] }> { - return mockPatchAppConfig() - } - - async patchServerConfig (attr: string, value: any): Promise { - await mockPatchServerConfig() - this.serverModel.update({ [attr]: value }) - return { } - } - - async wipeAppData (app: AppInstalledPreview): Promise { - return mockWipeAppData() - } - - async addSSHKey (sshKey: string): Promise { - const fingerprint = await mockAddSSHKey() - this.serverModel.update({ ssh: [...this.serverModel.peek().ssh, fingerprint] }) - return { } - } - - async deleteSSHKey (fingerprint: SSHFingerprint): Promise { - await mockDeleteSSHKey() - const ssh = this.serverModel.peek().ssh - this.serverModel.update({ ssh: ssh.filter(s => s !== fingerprint) }) - return { } - } - - async addWifi (ssid: string, password: string, country: string, connect: boolean): Promise { - return mockAddWifi() - } - - async connectWifi (ssid: string): Promise { - return mockConnectWifi() - } - - async deleteWifi (ssid: string): Promise { - return mockDeleteWifi() - } - - async restartServer (): Promise { - return mockRestartServer() - } - - async shutdownServer (): Promise { - return mockShutdownServer() - } - - async serviceAction (appId: string, action: ServiceAction): Promise { - await pauseFor(1000) return { - jsonrpc: '2.0', - id: '0', - result: 'Congrats! you did\na new line: ' + action.name, - // error: { - // code: 1, - // message: 'woooo that was bad bad bad', - // }, + response: null, + revision: { + id: this.nextSequence(), + patch: [ + { + op: PatchOp.REPLACE, + path: params.pointer, + value: params.value, + }, + ], + expireId: null, + }, } } - async refreshLAN (): Promise { - return mockRefreshLAN() + // auth + + async submitPin (params: RR.SubmitPinReq): Promise { + await pauseFor(2000) + return null } - async checkV1Status (): Promise { + async submitPassword (params: RR.SubmitPasswordReq): Promise { + await pauseFor(2000) + return null + } + + async logout (params: RR.LogoutReq): Promise { + await pauseFor(2000) + return null + } + + // server + + async getServerLogs (params: RR.GetServerLogsReq): Promise { + await pauseFor(2000) + return Mock.ServerLogs + } + + async getServerMetrics (params: RR.GetServerMetricsReq): Promise { + await pauseFor(2000) + return Mock.ServerMetrics + } + + async updateServerRaw (params: RR.UpdateServerReq): Promise { + await pauseFor(2000) return { - status: 'instructions', - version: '1.0.0', + response: null, + revision: { + id: this.nextSequence(), + patch: [ + { + op: PatchOp.REPLACE, + path: '/server-info/status', + value: ServerStatus.Updating, + }, + ], + expireId: null, + }, } } - private hasUI (app: ApiAppInstalledPreview): boolean { - return app.lanUi || app.torUi + async restartServer (params: RR.RestartServerReq): Promise { + await pauseFor(2000) + return null } - private isLaunchable (app: ApiAppInstalledPreview): boolean { - return !this.config.isConsulate && - app.status === AppStatus.RUNNING && - ( - (app.torAddress && app.torUi && this.config.isTor()) || - (app.lanAddress && app.lanUi && !this.config.isTor()) - ) + async shutdownServer (params: RR.ShutdownServerReq): Promise { + await pauseFor(2000) + return null } -} -async function mockGetServer (): Promise { - await pauseFor(1000) - return mockApiServer() -} + // network -async function mockGetVersionLatest (): Promise { - await pauseFor(1000) - return mockVersionLatest -} + async refreshLan (params: RR.RefreshLanReq): Promise { + await pauseFor(2000) + return null + } -async function mockGetServerMetrics (): Promise { - await pauseFor(1000) - return mockApiServerMetrics -} + // registry -async function mockGetNotifications (): Promise { - await pauseFor(1000) - function cloneAndChange (arr: S9Notification[], letter: string) { return JSON.parse(JSON.stringify(arr)).map(a => { a.id = a.id + letter; return a }) } - return mockApiNotifications.concat(cloneAndChange(mockApiNotifications, 'a')).concat(cloneAndChange(mockApiNotifications, 'b')) -} - -async function mockDeleteNotification (): Promise { - await pauseFor(1000) - return { } -} - -async function mockGetExternalDisks (): Promise { - await pauseFor(1000) - return mockApiExternalDisks -} - -async function mockPostUpdateAgent (): Promise { - await pauseFor(1000) - return { } -} - -async function mockGetAvailableApp (appId: string): Promise { - await pauseFor(1000) - return mockApiAppAvailableFull[appId] -} - -async function mockGetAvailableApps (): Promise { - await pauseFor(1000) - return Object.values(mockApiAppAvailableFull) -} - -async function mockGetInstalledApp (appId: string): Promise { - await pauseFor(1000) - return { ...mockApiAppInstalledFull[appId] } -} - -async function mockGetInstalledApps (): Promise { - await pauseFor(1000) - return Object.values(mockApiAppInstalledFull).map(toInstalledPreview).filter(({ versionInstalled}) => !!versionInstalled) -} - -async function mockGetAppLogs (): Promise { - await pauseFor(1000) - return mockApiAppLogs -} - -async function mockGetServerLogs (): Promise { - await pauseFor(1000) - return mockApiServerLogs -} - -async function mockGetAppMetrics (): Promise { - await pauseFor(1000) - return mockApiAppMetricsV1 as ReqRes.GetAppMetricsRes -} - -async function mockGetAvailableAppVersionInfo (): Promise { - await pauseFor(1000) - return mockApiAppAvailableVersionInfo -} - -async function mockGetAppConfig (): Promise { - await pauseFor(1000) - return mockApiAppConfig -} - -async function mockInstallApp (appId: string): Promise { - await pauseFor(1000) - return { ...mockApiAppInstalledFull[appId], ...mockAppDependentBreakages } -} - -async function mockUninstallApp (): Promise< { breakages: DependentBreakage[] } > { - await pauseFor(1000) - return mockAppDependentBreakages -} - -async function mockStartApp (): Promise { - await pauseFor(1000) - return { } -} - -async function mockStopApp (): Promise { - await pauseFor(1000) - return { } -} - -async function mockCreateAppBackup (): Promise { - await pauseFor(1000) - return { } -} - -async function mockStopAppBackup (): Promise { - await pauseFor(1000) - return { } -} - - -async function mockPatchAppConfig (): Promise<{ breakages: DependentBreakage[] }> { - await pauseFor(1000) - return mockAppDependentBreakages -} - -async function mockPatchServerConfig (): Promise { - await pauseFor(1000) - return { } -} - -async function mockWipeAppData (): Promise { - await pauseFor(1000) - return { } -} - -async function mockAddSSHKey (): Promise { - await pauseFor(1000) - return mockApiServer().ssh[0] -} - -async function mockDeleteSSHKey (): Promise { - await pauseFor(1000) - return { } -} - -async function mockAddWifi (): Promise { - await pauseFor(1000) - return { } -} - -async function mockConnectWifi (): Promise { - await pauseFor(1000) - return { } -} - -async function mockDeleteWifi (): Promise { - await pauseFor(1000) - return { } -} - -async function mockRestartServer (): Promise { - await pauseFor(1000) - return { } -} - -async function mockShutdownServer (): Promise { - await pauseFor(1000) - return { } -} - -async function mockRefreshLAN (): Promise { - await pauseFor(1000) - return { } -} - -const mockApiNotifications: ReqRes.GetNotificationsRes = [ - { - id: '123e4567-e89b-12d3-a456-426655440000', - appId: 'bitcoind', - createdAt: '2019-12-26T14:20:30.872Z', - code: '101', - title: 'Install Complete', - message: 'Installation of bitcoind has completed successfully.', - }, - { - id: '123e4567-e89b-12d3-a456-426655440001', - appId: 'bitcoind', - createdAt: '2019-12-26T14:20:30.872Z', - code: '201', - title: 'SSH Key Added', - message: 'A new SSH key was added. If you did not do this, shit is bad.', - }, - { - id: '123e4567-e89b-12d3-a456-426655440002', - appId: 'bitcoind', - createdAt: '2019-12-26T14:20:30.872Z', - code: '002', - title: 'SSH Key Removed', - message: 'A SSH key was removed.', - }, - { - id: '123e4567-e89b-12d3-a456-426655440003', - appId: 'bitcoind', - createdAt: '2019-12-26T14:20:30.872Z', - code: '310', - title: 'App Crashed', - message: 'Bitcoind has crashed', - }, -] - -const mockApiServer: () => ReqRes.GetServerRes = () => ({ - serverId: 'start9-mockxyzab', - name: 'Embassy:12345678', - versionInstalled: '0.2.17', - versionLatest: '0.2.17', - status: ServerStatus.RUNNING, - alternativeRegistryUrl: 'beta-registry.start9labs.com', - welcomeAck: true, - autoCheckUpdates: true, - specs: { - 'Tor Address': 'nfsnjkcnaskjnlkasnfahj7dh23fdnieqwjdnhjewbfijendiueqwbd.onion', - 'CPU': 'Broadcom BCM2711, Quad core Cortex-A72 (ARM v8) 64-bit SoC @ 1.5GHz', - 'RAM': '4GB LPDDR4-2400 SDRAM', - 'WiFI': '2.4 GHz and 5.0 GHz IEEE 802.11ac wireless, Bluetooth 5.0, BLE', - 'Ethernet': 'Gigabit', - 'Disk': '512 GB Flash (280 GB available)', - 'EmbassyOS Version': '0.1.0.1', - }, - wifi: { - ssids: ['Goosers', 'Atlantic City'], - current: 'Goosers', - }, - ssh: [ - { - alg: 'ed25519', - hash: '28:d2:7e:78:61:b4:bf:g2:de:24:15:96:4e:d4:15:53', - hostname: 'aaron key', - }, - { - alg: 'ed25519', - hash: '12:f8:7e:78:61:b4:bf:e2:de:24:15:96:4e:d4:72:53', - hostname: 'matt macbook pro', - }, - ], -}) - -const mockVersionLatest: ReqRes.GetVersionLatestRes = { - versionLatest: '15.2.8.6', - releaseNotes: `*Hello*, **Testing Markdown**. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Praesent aliquet, sapien sit amet pretium lacinia, neque tortor consectetur nunc, non volutpat lectus neque in leo. Curabitur a odio eleifend, placerat purus non, aliquet nulla. Aliquam eget lacinia lectus. Aliquam gravida elit eu magna pretium, non interdum tortor vulputate. Ut ac tortor vel tellus blandit malesuada ac ac tortor. Integer tincidunt est quam, non convallis sapien vehicula sed. Donec ullamcorper convallis massa, nec euismod enim tempus vitae. In condimentum semper pulvinar. Sed viverra est id lectus tincidunt, et malesuada eros malesuada. - Curabitur scelerisque eu mauris eget dapibus. In egestas est sit amet nisi cursus iaculis. Mauris consequat pharetra ex, vitae sollicitudin tortor viverra id. Suspendisse lacinia justo id tincidunt feugiat. Nunc risus elit, viverra vel vestibulum ac, varius vel eros. Nam at tellus tempor, semper metus et, tristique elit. Vivamus a dui sit amet orci tincidunt tincidunt. Cras ut velit pretium, euismod dolor non, pulvinar lorem. Praesent dignissim eros quis tortor bibendum, nec convallis libero viverra. Aenean sit amet massa maximus eros congue pellentesque ac nec massa. Nam feugiat felis mi, a aliquet enim porta eget. - Phasellus pellentesque magna vel elit malesuada elementum. Curabitur maximus scelerisque vulputate. Duis facilisis et nisi sed facilisis. Ut consectetur odio tortor, vitae elementum velit scelerisque eget. Maecenas bibendum, massa eu bibendum rhoncus, turpis ex condimentum elit, vel pulvinar ex mi sed urna. Etiam ac erat lectus. Suspendisse dignissim massa tortor. Donec ac dolor in tortor faucibus scelerisque. Nullam et lacus eros. Cras eget sapien nec felis condimentum tincidunt. Praesent ac ante dui. Nam euismod nunc neque, et scelerisque erat efficitur nec. Aenean efficitur tincidunt nulla, ac tempor leo blandit sed. Duis sed tellus quis ante consequat ornare nec vitae eros. Praesent ultrices nunc ut lacus tincidunt finibus. Praesent at eros non est commodo ultricies. - Curabitur eu felis convallis, lobortis nulla laoreet, commodo lacus. Vestibulum at sapien sed metus tincidunt vulputate. Donec cursus augue non sapien imperdiet cursus. Aliquam pellentesque ligula id magna blandit rutrum. Aliquam mattis ipsum leo, nec pharetra lectus tristique eu. Duis egestas mollis aliquam. Duis aliquet dictum risus, quis dictum mauris finibus id.`, -} - -const mockApiServerMetrics: ReqRes.GetServerMetricsRes = { - 'Group1': { - 'Metric1': { - value: 22.2, - unit: 'mi/b', - }, - 'Metric2': { - value: 50, - unit: '%', - }, - 'Metric3': { - value: 10.1, - unit: '%', - }, - }, - 'Group2': { - 'Hmmmm1': { - value: 22.2, - unit: 'mi/b', - }, - 'Hmmmm2': { - value: 50, - unit: '%', - }, - 'Hmmmm3': { - value: 10.1, - unit: '%', - }, - }, -} - -const mockApiExternalDisks: DiskInfo[] = [ - { - logicalname: '/dev/sda', - size: '32GB', - description: 'Samsung', - partitions: [ - { - logicalname: 'sdba2', - size: null, - isMounted: false, - label: 'Matt Stuff', + async setRegistryRaw (params: RR.SetRegistryReq): Promise { + await pauseFor(2000) + return { + response: null, + revision: { + id: this.nextSequence(), + patch: [ + { + op: PatchOp.REPLACE, + path: '/server-info/registry', + value: params.url, + }, + ], + expireId: null, }, - ], - }, - { - logicalname: '/dev/sba', - size: '64GB', - description: 'small USB stick', - partitions: [ - { - logicalname: 'sdba2', - size: '16GB', - isMounted: true, - label: null, - }, - ], - }, - { - logicalname: '/dev/sbd', - size: '128GB', - description: 'large USB stick', - partitions: [ - { - logicalname: 'sdba1', - size: '32GB', - isMounted: false, - label: 'Partition 1', - }, - { - logicalname: 'sdba2', - size: null, - isMounted: true, - label: 'Partition 2', - }, - ], - }, -] + } + } -const mockApiAppLogs: string[] = [ - '****** START *****', - '[ng] ℹ 「wdm」: Compiled successfully.', - '[ng] ℹ 「wdm」: Compiling...', - '[ng] Date: 2019-12-26T14:20:30.872Z - Hash: 2b2e5abb3cba2164aea0', - '[ng] 114 unchanged chunks', - '[ng] chunk {app-logs-app-logs-module} app-logs-app-logs-module.js, app-logs-app-logs-module.js.map (app-logs-app-logs-module) 7.86 kB [rendered]', - '[ng] Time: 1244ms', - '[ng] ℹ 「wdm」: Compiled successfully.', - '[ng] ℹ 「wdm」: Compiling...', - '[ng] Date: 2019-12-26T14:21:01.685Z - Hash: bb3f5d0e11f2cd2dd57b', - '[ng] 114 unchanged chunks', - '[ng] chunk {app-logs-app-logs-module} app-logs-app-logs-module.js, app-logs-app-logs-module.js.map (app-logs-app-logs-module) 7.86 kB [rendered]', - '[ng] Time: 1185ms', - '[ng] ℹ 「wdm」: Compiled successfully.', - '[ng] ℹ 「wdm」: Compiling...', - '[ng] Date: 2019-12-26T14:23:13.812Z - Hash: 9342e11e6b8e16ad2f70', - '[ng] 114 unchanged chunks', - '[ng] ℹ 「wdm」: Compiled successfully.', - '[ng] ℹ 「wdm」: Compiling...', - '[ng] Date: 2019-12-26T14:20:30.872Z - Hash: 2b2e5abb3cba2164aea0', - '[ng] 114 unchanged chunks', - '[ng] chunk {app-logs-app-logs-module} app-logs-app-logs-module.js, app-logs-app-logs-module.js.map (app-logs-app-logs-module) 7.86 kB [rendered]', - '[ng] Time: 1244ms', - '[ng] ℹ 「wdm」: Compiled successfully.', - '[ng] ℹ 「wdm」: Compiling...', - '[ng] Date: 2019-12-26T14:21:01.685Z - Hash: bb3f5d0e11f2cd2dd57b', - '[ng] 114 unchanged chunks', - '[ng] chunk {app-logs-app-logs-module} app-logs-app-logs-module.js, app-logs-app-logs-module.js.map (app-logs-app-logs-module) 7.86 kB [rendered]', - '[ng] Time: 1185ms', - '[ng] ℹ 「wdm」: Compiled successfully.', - '[ng] ℹ 「wdm」: Compiling...', - '[ng] Date: 2019-12-26T14:23:13.812Z - Hash: 9342e11e6b8e16ad2f70', - '[ng] 114 unchanged chunks', - '[ng] ℹ 「wdm」: Compiled successfully.', - '[ng] ℹ 「wdm」: Compiling...', - '[ng] Date: 2019-12-26T14:20:30.872Z - Hash: 2b2e5abb3cba2164aea0', - '[ng] 114 unchanged chunks', - '[ng] chunk {app-logs-app-logs-module} app-logs-app-logs-module.js, app-logs-app-logs-module.js.map (app-logs-app-logs-module) 7.86 kB [rendered]', - '[ng] Time: 1244ms', - '[ng] ℹ 「wdm」: Compiled successfully.', - '[ng] ℹ 「wdm」: Compiling...', - '[ng] Date: 2019-12-26T14:21:01.685Z - Hash: bb3f5d0e11f2cd2dd57b', - '[ng] 114 unchanged chunks', - '[ng] chunk {app-logs-app-logs-module} app-logs-app-logs-module.js, app-logs-app-logs-module.js.map (app-logs-app-logs-module) 7.86 kB [rendered]', - '[ng] Time: 1185ms', - '[ng] ℹ 「wdm」: Compiled successfully.', - '[ng] ℹ 「wdm」: Compiling...', - '[ng] Date: 2019-12-26T14:23:13.812Z - Hash: 9342e11e6b8e16ad2f70', - '[ng] 114 unchanged chunks', - '[ng] ℹ 「wdm」: Compiled successfully.', - '[ng] ℹ 「wdm」: Compiling...', - '[ng] Date: 2019-12-26T14:20:30.872Z - Hash: 2b2e5abb3cba2164aea0', - '[ng] 114 unchanged chunks', - '[ng] chunk {app-logs-app-logs-module} app-logs-app-logs-module.js, app-logs-app-logs-module.js.map (app-logs-app-logs-module) 7.86 kB [rendered]', - '[ng] Time: 1244ms', - '[ng] ℹ 「wdm」: Compiled successfully.', - '[ng] ℹ 「wdm」: Compiling...', - '[ng] Date: 2019-12-26T14:21:01.685Z - Hash: bb3f5d0e11f2cd2dd57b', - '[ng] 114 unchanged chunks', - '[ng] chunk {app-logs-app-logs-module} app-logs-app-logs-module.js, app-logs-app-logs-module.js.map (app-logs-app-logs-module) 7.86 kB [rendered]', - '[ng] Time: 1185ms', - '[ng] ℹ 「wdm」: Compiled successfully.', - '[ng] ℹ 「wdm」: Compiling...', - '[ng] Date: 2019-12-26T14:23:13.812Z - Hash: 9342e11e6b8e16ad2f70', - '[ng] 114 unchanged chunks', - '[ng] ℹ 「wdm」: Compiled successfully.', - '[ng] ℹ 「wdm」: Compiling...', - '[ng] Date: 2019-12-26T14:20:30.872Z - Hash: 2b2e5abb3cba2164aea0', - '[ng] 114 unchanged chunks', - '[ng] chunk {app-logs-app-logs-module} app-logs-app-logs-module.js, app-logs-app-logs-module.js.map (app-logs-app-logs-module) 7.86 kB [rendered]', - '[ng] Time: 1244ms', - '[ng] ℹ 「wdm」: Compiled successfully.', - '[ng] ℹ 「wdm」: Compiling...', - '[ng] Date: 2019-12-26T14:21:01.685Z - Hash: bb3f5d0e11f2cd2dd57b', - '[ng] 114 unchanged chunks', - '[ng] chunk {app-logs-app-logs-module} app-logs-app-logs-module.js, app-logs-app-logs-module.js.map (app-logs-app-logs-module) 7.86 kB [rendered]', - '[ng] Time: 1185ms', - '[ng] ℹ 「wdm」: Compiled successfully.', - '[ng] ℹ 「wdm」: Compiling...', - '[ng] Date: 2019-12-26T14:23:13.812Z - Hash: 9342e11e6b8e16ad2f70', - '[ng] 114 unchanged chunks', - '****** FINISH *****', -] + // notification -const mockApiServerLogs: string[] = [ - '****** START *****', - '[ng] ℹ 「wdm」: Compiled successfully.', - '[ng] ℹ 「wdm」: Compiling...', - '[ng] Date: 2019-12-26T14:20:30.872Z - Hash: 2b2e5abb3cba2164aea0', - '[ng] 114 unchanged chunks', - '[ng] chunk {app-logs-app-logs-module} app-logs-app-logs-module.js, app-logs-app-logs-module.js.map (app-logs-app-logs-module) 7.86 kB [rendered]', - '[ng] Time: 1244ms', - '[ng] ℹ 「wdm」: Compiled successfully.', - '[ng] ℹ 「wdm」: Compiling...', - '[ng] Date: 2019-12-26T14:21:01.685Z - Hash: bb3f5d0e11f2cd2dd57b', - '[ng] 114 unchanged chunks', - '[ng] chunk {app-logs-app-logs-module} app-logs-app-logs-module.js, app-logs-app-logs-module.js.map (app-logs-app-logs-module) 7.86 kB [rendered]', - '[ng] Time: 1185ms', - '[ng] ℹ 「wdm」: Compiled successfully.', - '[ng] ℹ 「wdm」: Compiling...', - '[ng] Date: 2019-12-26T14:23:13.812Z - Hash: 9342e11e6b8e16ad2f70', - '[ng] 114 unchanged chunks', - '[ng] ℹ 「wdm」: Compiled successfully.', - '[ng] ℹ 「wdm」: Compiling...', - '[ng] Date: 2019-12-26T14:20:30.872Z - Hash: 2b2e5abb3cba2164aea0', - '[ng] 114 unchanged chunks', - '[ng] chunk {app-logs-app-logs-module} app-logs-app-logs-module.js, app-logs-app-logs-module.js.map (app-logs-app-logs-module) 7.86 kB [rendered]', - '[ng] Time: 1244ms', - '[ng] ℹ 「wdm」: Compiled successfully.', - '[ng] ℹ 「wdm」: Compiling...', - '[ng] Date: 2019-12-26T14:21:01.685Z - Hash: bb3f5d0e11f2cd2dd57b', - '[ng] 114 unchanged chunks', - '[ng] chunk {app-logs-app-logs-module} app-logs-app-logs-module.js, app-logs-app-logs-module.js.map (app-logs-app-logs-module) 7.86 kB [rendered]', - '[ng] Time: 1185ms', - '[ng] ℹ 「wdm」: Compiled successfully.', - '[ng] ℹ 「wdm」: Compiling...', - '[ng] Date: 2019-12-26T14:23:13.812Z - Hash: 9342e11e6b8e16ad2f70', - '[ng] 114 unchanged chunks', - '[ng] ℹ 「wdm」: Compiled successfully.', - '[ng] ℹ 「wdm」: Compiling...', - '[ng] Date: 2019-12-26T14:20:30.872Z - Hash: 2b2e5abb3cba2164aea0', - '[ng] 114 unchanged chunks', - '[ng] chunk {app-logs-app-logs-module} app-logs-app-logs-module.js, app-logs-app-logs-module.js.map (app-logs-app-logs-module) 7.86 kB [rendered]', - '[ng] Time: 1244ms', - '[ng] ℹ 「wdm」: Compiled successfully.', - '[ng] ℹ 「wdm」: Compiling...', - '[ng] Date: 2019-12-26T14:21:01.685Z - Hash: bb3f5d0e11f2cd2dd57b', - '[ng] 114 unchanged chunks', - '[ng] chunk {app-logs-app-logs-module} app-logs-app-logs-module.js, app-logs-app-logs-module.js.map (app-logs-app-logs-module) 7.86 kB [rendered]', - '[ng] Time: 1185ms', - '[ng] ℹ 「wdm」: Compiled successfully.', - '[ng] ℹ 「wdm」: Compiling...', - '[ng] Date: 2019-12-26T14:23:13.812Z - Hash: 9342e11e6b8e16ad2f70', - '[ng] 114 unchanged chunks', - '[ng] ℹ 「wdm」: Compiled successfully.', - '[ng] ℹ 「wdm」: Compiling...', - '[ng] Date: 2019-12-26T14:20:30.872Z - Hash: 2b2e5abb3cba2164aea0', - '[ng] 114 unchanged chunks', - '[ng] chunk {app-logs-app-logs-module} app-logs-app-logs-module.js, app-logs-app-logs-module.js.map (app-logs-app-logs-module) 7.86 kB [rendered]', - '[ng] Time: 1244ms', - '[ng] ℹ 「wdm」: Compiled successfully.', - '[ng] ℹ 「wdm」: Compiling...', - '[ng] Date: 2019-12-26T14:21:01.685Z - Hash: bb3f5d0e11f2cd2dd57b', - '[ng] 114 unchanged chunks', - '[ng] chunk {app-logs-app-logs-module} app-logs-app-logs-module.js, app-logs-app-logs-module.js.map (app-logs-app-logs-module) 7.86 kB [rendered]', - '[ng] Time: 1185ms', - '[ng] ℹ 「wdm」: Compiled successfully.', - '[ng] ℹ 「wdm」: Compiling...', - '[ng] Date: 2019-12-26T14:23:13.812Z - Hash: 9342e11e6b8e16ad2f70', - '[ng] 114 unchanged chunks', - '[ng] ℹ 「wdm」: Compiled successfully.', - '[ng] ℹ 「wdm」: Compiling...', - '[ng] Date: 2019-12-26T14:20:30.872Z - Hash: 2b2e5abb3cba2164aea0', - '[ng] 114 unchanged chunks', - '[ng] chunk {app-logs-app-logs-module} app-logs-app-logs-module.js, app-logs-app-logs-module.js.map (app-logs-app-logs-module) 7.86 kB [rendered]', - '[ng] Time: 1244ms', - '[ng] ℹ 「wdm」: Compiled successfully.', - '[ng] ℹ 「wdm」: Compiling...', - '[ng] Date: 2019-12-26T14:21:01.685Z - Hash: bb3f5d0e11f2cd2dd57b', - '[ng] 114 unchanged chunks', - '[ng] chunk {app-logs-app-logs-module} app-logs-app-logs-module.js, app-logs-app-logs-module.js.map (app-logs-app-logs-module) 7.86 kB [rendered]', - '[ng] Time: 1185ms', - '[ng] ℹ 「wdm」: Compiled successfully.', - '[ng] ℹ 「wdm」: Compiling...', - '[ng] Date: 2019-12-26T14:23:13.812Z - Hash: 9342e11e6b8e16ad2f70', - '[ng] 114 unchanged chunks', - '****** FINISH *****', -] + async getNotificationsRaw (params: RR.GetNotificationsReq): Promise { + await pauseFor(2000) + return { + response: Mock.Notifications, + revision: { + id: this.nextSequence(), + patch: [ + { + op: PatchOp.REPLACE, + path: '/server-info/unread-notification-count', + value: 0, + }, + ], + expireId: null, + }, + } + } -const mockApiAppMetricsV1: AppMetricsVersioned<2> = { - version: 2, - data: { - 'Test': { - type: 'string', - description: 'This is some information about the thing.', + async deleteNotification (params: RR.DeleteNotificationReq): Promise { + await pauseFor(2000) + return null + } + + // wifi + + async addWifi (params: RR.AddWifiReq): Promise { + await pauseFor(2000) + return null + } + + async connectWifiRaw (params: RR.ConnectWifiReq): Promise { + await pauseFor(2000) + return { + response: null, + revision: { + id: this.nextSequence(), + patch: [ + { + op: PatchOp.REPLACE, + path: '/server-info/wifi/selected', + value: params.ssid, + }, + { + op: PatchOp.REPLACE, + path: '/server-info/wifi/connected', + value: params.ssid, + }, + ], + expireId: null, + }, + } + } + + async deleteWifiRaw (params: RR.DeleteWifiReq): Promise { + await pauseFor(2000) + return { + response: null, + revision: { + id: this.nextSequence(), + patch: [ + { + op: PatchOp.REPLACE, + path: '/server-info/wifi/selected', + value: null, + }, + { + op: PatchOp.REPLACE, + path: '/server-info/wifi/connected', + value: null, + }, + ], + expireId: null, + }, + } + } + + // ssh + + async getSshKeys (params: RR.GetSSHKeysReq): Promise { + await pauseFor(2000) + return Mock.SshKeys + } + + async addSshKey (params: RR.AddSSHKeyReq): Promise { + await pauseFor(2000) + return Mock.SshKey + } + + async deleteSshKey (params: RR.DeleteSSHKeyReq): Promise { + await pauseFor(2000) + return null + } + + // backup + + async createBackupRaw (params: RR.CreateBackupReq): Promise { + await pauseFor(2000) + return { + response: null, + revision: { + id: this.nextSequence(), + patch: [ + { + op: PatchOp.REPLACE, + path: '/server-info/status', + value: ServerStatus.BackingUp, + }, + ], + expireId: null, + }, + } + } + + async restoreBackupRaw (params: RR.RestoreBackupReq): Promise { + await pauseFor(2000) + return null + } + + // disk + + async getDisks (params: RR.GetDisksReq): Promise { + await pauseFor(2000) + return Mock.Disks + } + + async ejectDisk (params: RR.EjectDisksReq): Promise { + await pauseFor(2000) + return null + } + + // package + + async getPackageProperties (params: RR.GetPackagePropertiesReq): Promise['data']> { + await pauseFor(2000) + return parsePropertiesPermissive(Mock.PackageProperties) + } + + async getPackageLogs (params: RR.GetPackageLogsReq): Promise { + await pauseFor(2000) + return Mock.PackageLogs + } + + async installPackageRaw (params: RR.InstallPackageReq): Promise { + await pauseFor(2000) + const pkg: PackageDataEntry = { + ...Mock.bitcoinproxy, + state: PackageState.Installing, + 'temp-manifest': Mock.MockManifestBitcoinProxy, + // installed: undefined, + 'install-progress': { + size: 100, + downloaded: 10, + 'download-complete': false, + validated: 1, + 'validation-complete': true, + read: 50, + 'read-complete': false, + }, + } + return { + response: null, + revision: { + id: this.nextSequence(), + patch: [ + { + op: PatchOp.ADD, + path: `/package-data/${params.id}`, + value: pkg, + }, + ], + expireId: null, + }, + } + } + + async dryUpdatePackage (params: RR.DryUpdatePackageReq): Promise { + await pauseFor(2000) + return { + patch: [], + breakages: { }, + } + } + + async getPackageConfig (params: RR.GetPackageConfigReq): Promise { + await pauseFor(2000) + return Mock.PackageConfig + } + + async drySetPackageConfig (params: RR.DrySetPackageConfigReq): Promise { + await pauseFor(2000) + return { + patch: [], + breakages: { }, + } + } + + async setPackageConfigRaw (params: RR.SetPackageConfigReq): Promise { + await pauseFor(2000) + return { + response: null, + revision: { + id: this.nextSequence(), + patch: [ + { + op: PatchOp.REPLACE, + path: `/package-data/${params.id}/installed/status/configured`, + value: true, + }, + { + op: PatchOp.REPLACE, + path: `/package-data/${params.id}/installed/status/main/status`, + value: PackageMainStatus.Running, + }, + ], + expireId: null, + }, + } + } + + async restorePackageRaw (params: RR.RestorePackageReq): Promise { + await pauseFor(2000) + return { + response: null, + revision: { + id: this.nextSequence(), + patch: [ + { + op: PatchOp.REPLACE, + path: `/package-data/${params.id}/installed/status/main/status`, + value: PackageMainStatus.Restoring, + }, + ], + expireId: null, + }, + } + } + + async executePackageAction (params: RR.ExecutePackageActionReq): Promise { + await pauseFor(2000) + return { + message: 'Action success!', + value: 'new password', copyable: true, - qr: true, - masked: false, - value: 'lndconnect://udlyfq2mxa4355pt7cqlrdipnvk2tsl4jtsdw7zaeekenufwcev2wlad.onion:10009?cert=MIICJTCCAcugAwIBAgIRAOyq85fqAiA3U3xOnwhH678wCgYIKoZIzj0EAwIwODEfMB0GAkUEChMWbG5kIGF1dG9nZW5lcmF0ZWQgY2VydDEVMBMGA1UEAxMMNTc0OTkwMzIyYzZlMB4XDTIwMTAyNjA3MzEyN1oXDTIxMTIyMTA3MzEyN1owODEfMB0GA1UEChMWbG5kIGF1dG9nZW5lcmF0ZWQgY2VydDEVMBMGA1UEAxMMNTc0OTkwMzIyYzZlMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEKqfhAMMZdY-eFnU5P4bGrQTSx0lo7m8u4V0yYkzUM6jlql_u31_mU2ovLTj56wnZApkEjoPl6fL2yasZA2wiy6OBtTCBsjAOBgNVHQ8BAf8EBAMCAqQwEwYDVR0lBAwwCgYIKwYBBQUHAwEwDwYDVR0TAQH_BAUwAwEB_zAdBgNVHQ4EFgQUYQ9uIO6spltnVCx4rLFL5BvBF9IwWwYDVR0RBFQwUoIMNTc0OTkwMzIyYzZlgglsb2NhbGhvc3SCBHVuaXiCCnVuaXhwYWNrZXSCB2J1ZmNvbm6HBH8AAAGHEAAAAAAAAAAAAAAAAAAAAAGHBKwSAAswCgYIKoZIzj0EAwIDSAAwRQIgVZH2Z2KlyAVY2Q2aIQl0nsvN-OEN49wreFwiBqlxNj4CIQD5_JbpuBFJuf81I5J0FQPtXY-4RppWOPZBb-y6-rkIUQ&macaroon=AgEDbG5kAusBAwoQuA8OUMeQ8Fr2h-f65OdXdRIBMBoWCgdhZGRyZXNzEgRyZWFkEgV3cml0ZRoTCgRpbmZvEgRyZWFkEgV3cml0ZRoXCghpbnZvaWNlcxIEcmVhZBIFd3JpdGUaFAoIbWFjYXJvb24SCGdlbmVyYXRlGhYKB21lc3NhZ2USBHJlYWQSBXdyaXRlGhcKCG9mZmNoYWluEgRyZWFkEgV3cml0ZRoWCgdvbmNoYWluEgRyZWFkEgV3cml0ZRoUCgVwZWVycxIEcmVhZBIFd3JpdGUaGAoGc2lnbmVyEghnZW5lcmF0ZRIEcmVhZAAABiCYsRUoUWuAHAiCSLbBR7b_qULDSl64R8LIU2aqNIyQfA', - }, - 'Nested': { - type: 'object', - description: 'This is a nested thing metric', - value: { - 'Last Name': { - type: 'string', - description: 'The last name of the user', - copyable: true, - qr: true, - masked: false, - value: 'Hill', - }, - 'Age': { - type: 'string', - description: 'The age of the user', - copyable: false, - qr: false, - masked: false, - value: '35', - }, - 'Password': { - type: 'string', - description: 'A secret password', - copyable: true, - qr: false, - masked: true, - value: 'password123', - }, - }, - }, - 'Another Property': { - type: 'string', - description: 'Some more information about the service.', - copyable: false, - qr: true, - masked: false, - value: 'https://guessagain.com', - }, - }, -} + qr: false, + } + } -const mockApiAppConfig: ReqRes.GetAppConfigRes = { - // config spec - spec: { - 'testnet': { - 'name': 'Testnet', - 'type': 'boolean', - 'description': '*Hello*, **Testing Markdown**. Lorem ipsum dolor si', - 'changeWarning': 'Chain will have to resync!', - 'default': false, - }, - 'objectList': { - 'name': 'Object List', - 'type': 'list', - 'subtype': 'object', - 'description': 'This is a list of objects, like users or something', - 'range': '[0,4]', - 'default': [ - { - 'firstName': 'Admin', - 'lastName': 'User', - 'age': 40, - }, - { - 'firstName': 'Admin2', - 'lastName': 'User', - 'age': 40, - }, - ], - // the outer spec here, at the list level, says that what's inside (the inner spec) pertains to its inner elements. - // it just so happens that ValueSpecObject's have the field { spec: ConfigSpec } - // see 'unionList' below for a different example. - 'spec': { - 'uniqueBy': 'lastName', - 'displayAs': `I'm {{lastName}}, {{firstName}} {{lastName}}`, - 'spec': { - 'firstName': { - 'name': 'First Name', - 'type': 'string', - 'description': 'User first name', - 'nullable': true, - 'default': null, - 'masked': false, - 'copyable': false, + async startPackageRaw (params: RR.StartPackageReq): Promise { + await pauseFor(2000) + return { + response: null, + revision: { + id: this.nextSequence(), + patch: [ + { + op: PatchOp.REPLACE, + path: `/package-data/${params.id}/installed/status/main/status`, + value: PackageMainStatus.Running, }, - 'lastName': { - 'name': 'Last Name', - 'type': 'string', - 'description': 'User first name', - 'nullable': true, - 'default': { - 'charset': 'a-g,2-9', - 'len': 12, - }, - 'pattern': '^[a-zA-Z]+$', - 'patternDescription': 'must contain only letters.', - 'masked': false, - 'copyable': true, - }, - 'age': { - 'name': 'Age', - 'type': 'number', - 'description': 'The age of the user', - 'nullable': true, - 'default': null, - 'integral': false, - 'changeWarning': 'User must be at least 18.', - 'range': '[18,*)', - }, - }, + ], + expireId: null, }, - }, - 'unionList': { - 'name': 'Union List', - 'type': 'list', - 'subtype': 'union', - 'description': 'This is a sample list of unions', - 'changeWarning': 'If you change this, things may work.', - // a list of union selections. e.g. 'summer', 'winter',... - 'default': [ - 'summer', - ], - 'range': '[0, 2]', - 'spec': { - 'tag': { - 'id': 'preference', - 'name': 'Preferences', - 'variantNames': { - 'summer': 'Summer', - 'winter': 'Winter', - 'other': 'Other', - }, - }, - // this default is used to make a union selection when a new list element is first created - 'default': 'summer', - 'variants': { - 'summer': { - 'favorite-tree': { - 'name': 'Favorite Tree', - 'type': 'string', - 'nullable': false, - 'description': 'What is your favorite tree?', - 'default': 'Maple', - 'masked': false, - 'copyable': false, - }, - 'favorite-flower': { - 'name': 'Favorite Flower', - 'type': 'enum', - 'description': 'Select your favorite flower', - 'valueNames': { - 'none': 'Hate Flowers', - 'red': 'Red', - 'blue': 'Blue', - 'purple': 'Purple', - }, - 'values': [ - 'none', - 'red', - 'blue', - 'purple', - ], - 'default': 'none', - }, - }, - 'winter': { - 'like-snow': { - 'name': 'Like Snow?', - 'type': 'boolean', - 'description': 'Do you like snow or not?', - 'default': true, - }, - }, - }, - 'uniqueBy': 'preference', - }, - }, - 'randomEnum': { - 'name': 'Random Enum', - 'type': 'enum', - 'valueNames': { - 'null': 'Null', - 'option1': 'One 1', - 'option2': 'Two 2', - 'option3': 'Three 3', - }, - 'default': 'null', - 'description': 'This is not even real.', - 'changeWarning': 'Be careful chnaging this!', - 'values': [ - 'null', - 'option1', - 'option2', - 'option3', - ], - }, - 'favoriteNumber': { - 'name': 'Favorite Number', - 'type': 'number', - 'integral': false, - 'description': 'Your favorite number of all time', - 'changeWarning': 'Once you set this number, it can never be changed without severe consequences.', - 'nullable': false, - 'default': 7, - 'range': '(-100,100]', - 'units': 'BTC', - }, - 'secondaryNumbers': { - 'name': 'Unlucky Numbers', - 'type': 'list', - 'subtype': 'number', - 'description': 'Numbers that you like but are not your top favorite.', - 'spec': { - 'integral': false, - 'range': '[-100,200)', - }, - 'range': '[0,10]', - 'default': [ - 2, - 3, - ], - }, - 'rpcsettings': { - 'name': 'RPC Settings', - 'type': 'object', - 'uniqueBy': null, - 'description': 'rpc username and password', - 'changeWarning': 'Adding RPC users gives them special permissions on your node.', - 'nullable': false, - 'nullByDefault': false, - 'spec': { - 'laws': { - 'name': 'Laws', - 'type': 'object', - 'uniqueBy': 'law1', - 'description': 'the law of the realm', - 'nullable': true, - 'nullByDefault': true, - 'spec': { - 'law1': { - 'name': 'First Law', - 'type': 'string', - 'description': 'the first law', - 'nullable': true, - 'masked': false, - 'copyable': true, - }, - 'law2': { - 'name': 'Second Law', - 'type': 'string', - 'description': 'the second law', - 'nullable': true, - 'masked': false, - 'copyable': true, - }, - }, - }, - 'rulemakers': { - 'name': 'Rule Makers', - 'type': 'list', - 'subtype': 'object', - 'description': 'the people who make the rules', - 'range': '[0,2]', - 'default': [], - 'spec': { - 'uniqueBy': null, - 'spec': { - 'rulemakername': { - 'name': 'Rulemaker Name', - 'type': 'string', - 'description': 'the name of the rule maker', - 'nullable': false, - 'default': { - 'charset': 'a-g,2-9', - 'len': 12, - }, - 'masked': false, - 'copyable': false, - }, - 'rulemakerip': { - 'name': 'Rulemaker IP', - 'type': 'string', - 'description': 'the ip of the rule maker', - 'nullable': false, - 'default': '192.168.1.0', - 'pattern': '^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$', - 'patternDescription': 'may only contain numbers and periods', - 'masked': false, - 'copyable': true, - }, - }, - }, - }, - 'rpcuser': { - 'name': 'RPC Username', - 'type': 'string', - 'description': 'rpc username', - 'nullable': false, - 'default': 'defaultrpcusername', - 'pattern': '^[a-zA-Z]+$', - 'patternDescription': 'must contain only letters.', - 'masked': false, - 'copyable': true, - }, - 'rpcpass': { - 'name': 'RPC User Password', - 'type': 'string', - 'description': 'rpc password', - 'nullable': false, - 'default': { - 'charset': 'a-z,A-Z,2-9', - 'len': 20, - }, - 'masked': true, - 'copyable': true, - }, - }, - }, - 'advanced': { - 'name': 'Advanced', - 'type': 'object', - 'uniqueBy': null, - 'description': 'Advanced settings', - 'nullable': false, - 'nullByDefault': false, - 'spec': { - 'notifications': { - 'name': 'Notification Preferences', - 'type': 'list', - 'subtype': 'enum', - 'description': 'how you want to be notified', - 'range': '[1,3]', - 'default': [ - 'email', - ], - 'spec': { - 'valueNames': { - 'email': 'EEEEmail', - 'text': 'Texxxt', - 'call': 'Ccccall', - 'push': 'PuuuusH', - 'webhook': 'WebHooookkeee', - }, - 'values': [ - 'email', - 'text', - 'call', - 'push', - 'webhook', - ], - }, - }, - }, - }, - 'bitcoinNode': { - 'name': 'Bitcoin Node Settings', - 'type': 'union', - 'uniqueBy': null, - 'description': 'The node settings', - 'default': 'internal', - 'changeWarning': 'Careful changing this', - 'tag': { - 'id': 'type', - 'name': 'Type', - 'variantNames': { - 'internal': 'Internal', - 'external': 'External', - }, - }, - 'variants': { - 'internal': { - 'lan-address': { - 'name': 'LAN Address', - 'type': 'pointer', - 'subtype': 'app', - 'target': 'lan-address', - 'app-id': 'bitcoind', - 'description': 'the lan address', - }, - }, - 'external': { - 'public-domain': { - 'name': 'Public Domain', - 'type': 'string', - 'description': 'the public address of the node', - 'nullable': false, - 'default': 'bitcoinnode.com', - 'pattern': '.*', - 'patternDescription': 'anything', - 'masked': false, - 'copyable': true, - }, - }, - }, - }, - 'port': { - 'name': 'Port', - 'type': 'number', - 'integral': true, - 'description': 'the default port for your Bitcoin node. default: 8333, testnet: 18333, regtest: 18444', - 'nullable': false, - 'default': 8333, - 'range': '[0, 9999]', - }, - 'favoriteSlogan': { - 'name': 'Favorite Slogan', - 'type': 'string', - 'description': 'You most favorite slogan in the whole world, used for paying you.', - 'nullable': true, - 'masked': true, - 'copyable': true, - }, - 'rpcallowip': { - 'name': 'RPC Allowed IPs', - 'type': 'list', - 'subtype': 'string', - 'description': 'external ip addresses that are authorized to access your Bitcoin node', - 'changeWarning': 'Any IP you allow here will have RPC access to your Bitcoin node.', - 'range': '[1,10]', - 'default': [ - '192.168.1.1', - ], - 'spec': { - 'pattern': '((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|((^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]).){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]).){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))$)|(^[a-z2-7]{16}\\.onion$)|(^([a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?\\.)+[a-z0-9][a-z0-9-]{0,61}[a-z0-9]$))', - 'patternDescription': 'must be a valid ipv4, ipv6, or domain name', - }, - }, - 'rpcauth': { - 'name': 'RPC Auth', - 'type': 'list', - 'subtype': 'string', - 'description': 'api keys that are authorized to access your Bitcoin node.', - 'range': '[0,*)', - 'default': [], - 'spec': { }, - }, - }, - // actual config - config: { - // testnet: undefined, - // objectList: undefined, - // unionList: undefined, - // randomEnum: 'option1', - // favoriteNumber: 8, - // secondaryNumbers: undefined, - // rpcsettings: { - // laws: null, - // rpcpass: null, - // rpcuser: '123', - // rulemakers: [], - // }, - // advanced: { - // notifications: ['call'], - // }, - // bitcoinNode: undefined, - // port: 5959, - // maxconnections: null, - // rpcallowip: undefined, - // rpcauth: ['matt: 8273gr8qwoidm1uid91jeh8y23gdio1kskmwejkdnm'], - }, - rules: [], -} + } + } -export const mockCupsDependentConfig = { - randomEnum: 'option1', - testnet: false, - favoriteNumber: 8, - secondaryNumbers: [13, 58, 20], - objectList: [], - unionList: [], - rpcsettings: { - laws: null, - rpcpass: null, - rpcuser: '123', - rulemakers: [], - }, - advanced: { - notifications: [], - }, - bitcoinNode: { type: 'internal' }, - port: 5959, - maxconnections: null, - rpcallowip: [], - rpcauth: ['matt: 8273gr8qwoidm1uid91jeh8y23gdio1kskmwejkdnm'], -} \ No newline at end of file + async dryStopPackage (params: RR.DryStopPackageReq): Promise { + await pauseFor(2000) + return { + patch: [], + breakages: { }, + } + } + + async stopPackageRaw (params: RR.StopPackageReq): Promise { + await pauseFor(2000) + return { + response: null, + revision: { + id: this.nextSequence(), + patch: [ + { + op: PatchOp.REPLACE, + path: `/package-data/${params.id}/installed/status/main/status`, + value: PackageMainStatus.Stopping, + }, + ], + expireId: null, + }, + } + } + + async dryRemovePackage (params: RR.DryRemovePackageReq): Promise { + await pauseFor(2000) + return { + patch: [], + breakages: { }, + } + } + + async removePackageRaw (params: RR.RemovePackageReq): Promise { + await pauseFor(2000) + return { + response: null, + revision: { + id: this.nextSequence(), + patch: [ + { + op: PatchOp.REPLACE, + path: `/package-data/${params.id}/state`, + value: PackageState.Removing, + }, + ], + expireId: null, + }, + } + } + + async dryConfigureDependency (params: RR.DryConfigureDependencyReq): Promise { + await pauseFor(2000) + return { } + } + + // marketplace + + async getMarketplaceData (params: RR.GetMarketplaceDataReq): Promise { + await pauseFor(2000) + return { + categories: ['featured', 'bitcoin', 'lightning', 'data', 'messaging'], + } + } + + async getEos (params: RR.GetMarketplaceEOSReq): Promise { + await pauseFor(2000) + return Mock.MarketplaceEos + } + + async getAvailableList (params: RR.GetAvailableListReq): Promise { + await pauseFor(2000) + return Mock.AvailableList + } + + async getAvailableShow (params: RR.GetAvailableShowReq): Promise { + await pauseFor(2000) + return Mock.AvailableShow[params.id][params.version || 'latest'] + } + + private nextSequence () { + console.log('next') + this.sequence++ + return this.sequence + } +} diff --git a/ui/src/app/services/api/mock-app-fixures.ts b/ui/src/app/services/api/mock-app-fixures.ts index fe184aca8..064b279c0 100644 --- a/ui/src/app/services/api/mock-app-fixures.ts +++ b/ui/src/app/services/api/mock-app-fixures.ts @@ -1,325 +1,1404 @@ -import { AppStatus } from '../../models/app-model' -import { AppAvailablePreview, AppAvailableFull, AppInstalledPreview, AppDependency, BaseApp, AppInstalledFull, DependentBreakage, AppAvailableVersionSpecificInfo } from '../../models/app-types' -import { modulateTime } from 'src/app/util/misc.util' -import { ApiAppInstalledFull } from './api-types' +import { DependencyErrorType, DockerIoFormat, Manifest, PackageDataEntry, PackageMainStatus, PackageState, ServerStatus } from 'src/app/models/patch-db/data-model' +import { NotificationLevel, RR, ServerNotification, ServerNotifications } from './api-types' +import markdown from 'raw-loader!./md-sample.md' -export function toAvailablePreview (f: AppAvailableFull): AppAvailablePreview { - return { - id: f.id, - versionInstalled: f.versionInstalled, - status: f.status, - title: f.title, - descriptionShort: f.descriptionShort, - iconURL: f.iconURL, - versionLatest: f.versionLatest, - latestVersionTimestamp: f.latestVersionTimestamp, +export module Mock { + + export const MarketplaceEos: RR.GetMarketplaceEOSRes = { + version: '1.0.0', + headline: 'Our biggest release ever.', + notes: markdown, + } + + export const AvailableList: RR.GetAvailableListRes = [ + { + id: 'bitcoind', + title: 'Bitcoin Core', + version: '0.21.1', + descriptionShort: 'A Bitcoin full node by Bitcoin Core.', + icon: 'assets/img/service-icons/bitcoind.png', + }, + { + id: 'lnd', + title: 'Lightning Network Daemon', + version: '0.11.1', + descriptionShort: 'A BOLT-compliant, lightning network node.', + icon: 'assets/img/service-icons/lnd.png', + }, + { + id: 'bitcoin-proxy', + title: 'Bitcoin Proxy', + version: '0.2.2', + descriptionShort: 'A super charger for your Bitcoin node.', + icon: 'assets/img/service-icons/bitcoin-proxy.png', + }, + ] + + export const MockManifestBitcoind: Manifest = { + id: 'bitcoind', + title: 'Bitcoin Core', + version: '0.21.0', + description: { + short: 'A Bitcoin full node by Bitcoin Core.', + long: 'Bitcoin is a decentralized consensus protocol and settlement network.', + }, + 'release-notes': 'Taproot, Schnorr, and more.', + license: 'MIT', + 'wrapper-repo': 'https://github.com/start9labs/bitcoind-wrapper', + 'upstream-repo': 'https://github.com/bitcoin/bitcoin', + 'support-site': 'https://bitcoin.org', + 'marketing-site': 'https://bitcoin.org', + 'donation-url': 'https://start9.com', + alerts: { + install: 'Bitcoin can take over a week to sync.', + uninstall: 'Chain state will be lost, as will any funds stored on your Bitcoin Core waller that have not been backed up.', + restore: null, + start: null, + stop: 'Stopping Bitcoin is bad for your health.', + }, + main: { + type: 'docker', + image: '', + system: true, + entrypoint: '', + args: [''], + mounts: { }, + 'io-format': DockerIoFormat.Yaml, + inject: false, + 'shm-size': '', + }, + 'health-check': { + type: 'docker', + image: '', + system: true, + entrypoint: '', + args: [''], + mounts: { }, + 'io-format': DockerIoFormat.Yaml, + inject: false, + 'shm-size': '', + }, + config: null, + volumes: { }, + 'min-os-version': '0.2.12', + interfaces: { + ui: { + name: 'Node Visualizer', + description: 'Web application for viewing information about your node and the Bitcoin network.', + ui: true, + 'tor-config': { + 'hidden-service-version': 'v3', + 'port-mapping': { }, + }, + 'lan-config': { }, + protocols: [], + }, + rpc: { + name: 'RPC', + description: 'Used by wallets to interact with your Bitcoin Core node.', + ui: false, + 'tor-config': { + 'hidden-service-version': 'v3', + 'port-mapping': { }, + }, + 'lan-config': { }, + protocols: [], + }, + p2p: { + name: 'P2P', + description: 'Used by other Bitcoin nodes to communicate and interact with your node.', + ui: false, + 'tor-config': { + 'hidden-service-version': 'v3', + 'port-mapping': { }, + }, + 'lan-config': { }, + protocols: [], + }, + }, + backup: { + create: { + type: 'docker', + image: '', + system: true, + entrypoint: '', + args: [''], + mounts: { }, + 'io-format': DockerIoFormat.Yaml, + inject: false, + 'shm-size': '', + }, + restore: { + type: 'docker', + image: '', + system: true, + entrypoint: '', + args: [''], + mounts: { }, + 'io-format': DockerIoFormat.Yaml, + inject: false, + 'shm-size': '', + }, + }, + migrations: null, + actions: { + resync: { + name: 'Resync Blockchain', + description: 'Use this to resync the Bitcoin blockchain from genesis', + warning: 'This will take a couple of days.', + 'allowed-statuses': [PackageMainStatus.Running, PackageMainStatus.Stopped], + implementation: { + type: 'docker', + image: '', + system: true, + entrypoint: '', + args: [''], + mounts: { }, + 'io-format': DockerIoFormat.Yaml, + inject: false, + 'shm-size': '', + }, + 'input-spec': null, + }, + }, + permissions: { }, + dependencies: { }, + } + + export const MockManifestLnd: Manifest = { + id: 'lnd', + title: 'Lightning Network Daemon', + version: '0.11.1', + description: { + short: 'A bolt spec compliant client.', + long: 'More info about LND. More info about LND. More info about LND.', + }, + 'release-notes': 'Dual funded channels!', + license: 'MIT', + 'wrapper-repo': 'https://github.com/start9labs/lnd-wrapper', + 'upstream-repo': 'https://github.com/lightningnetwork/lnd', + 'support-site': 'https://lightning.engineering/', + 'marketing-site': 'https://lightning.engineering/', + 'donation-url': 'https://start9.com', + alerts: { + install: null, + uninstall: null, + restore: 'If this is a duplicate instance of the same LND node, you may loose your funds.', + start: 'Starting LND is good for your health.', + stop: null, + }, + main: { + type: 'docker', + image: '', + system: true, + entrypoint: '', + args: [''], + mounts: { }, + 'io-format': DockerIoFormat.Yaml, + inject: false, + 'shm-size': '', + }, + 'health-check': { + type: 'docker', + image: '', + system: true, + entrypoint: '', + args: [''], + mounts: { }, + 'io-format': DockerIoFormat.Yaml, + inject: false, + 'shm-size': '', + }, + config: null, + volumes: { }, + 'min-os-version': '0.2.12', + interfaces: { + rpc: { + name: 'RPC interface', + description: 'Good for connecting to your node at a distance.', + ui: true, + 'tor-config': { + 'hidden-service-version': 'v3', + 'port-mapping': { }, + }, + 'lan-config': { + 44: { + ssl: true, + mapping: 33, + }, + }, + protocols: [], + }, + grpc: { + name: 'GRPC', + description: 'Certain wallet use grpc.', + ui: false, + 'tor-config': { + 'hidden-service-version': 'v3', + 'port-mapping': { }, + }, + 'lan-config': { + 66: { + ssl: true, + mapping: 55, + }, + }, + protocols: [], + }, + }, + backup: { + create: { + type: 'docker', + image: '', + system: true, + entrypoint: '', + args: [''], + mounts: { }, + 'io-format': DockerIoFormat.Yaml, + inject: false, + 'shm-size': '', + }, + restore: { + type: 'docker', + image: '', + system: true, + entrypoint: '', + args: [''], + mounts: { }, + 'io-format': DockerIoFormat.Yaml, + inject: false, + 'shm-size': '', + }, + }, + migrations: null, + actions: { + resync: { + name: 'Resync Network Graph', + description: 'Your node will resync its network graph.', + warning: 'This will take a couple hours.', + 'allowed-statuses': [PackageMainStatus.Running], + implementation: { + type: 'docker', + image: '', + system: true, + entrypoint: '', + args: [''], + mounts: { }, + 'io-format': DockerIoFormat.Yaml, + inject: false, + 'shm-size': '', + }, + 'input-spec': { + label: { + type: 'string', + name: 'Name of Resync', + nullable: false, + masked: false, + copyable: false, + }, + }, + }, + }, + permissions: { }, + dependencies: { + 'bitcoind': { + version: '=0.21.0', + description: 'LND needs bitcoin to live.', + optional: null, + recommended: true, + config: [], + interfaces: [], + }, + 'bitcoin-proxy': { + version: '>=0.2.2', + description: 'As long as Bitcoin is pruned, LND needs Bitcoin Proxy to fetch block over the P2P network.', + optional: null, + recommended: true, + config: [], + interfaces: [], + }, + }, + } + + export const MockManifestBitcoinProxy: Manifest = { + id: 'bitcoin-proxy', + title: 'Bitcoin Proxy', + version: '0.2.2', + description: { + short: 'A super charger for your Bitcoin node.', + long: 'More info about Bitcoin Proxy. More info about Bitcoin Proxy. More info about Bitcoin Proxy.', + }, + 'release-notes': 'Even better support for Bitcoin and wallets!', + license: 'MIT', + 'wrapper-repo': 'https://github.com/start9labs/btc-rpc-proxy-wrapper', + 'upstream-repo': 'https://github.com/Kixunil/btc-rpc-proxy', + 'support-site': '', + 'marketing-site': '', + 'donation-url': 'https://start9.com', + alerts: { + install: null, + uninstall: null, + restore: null, + start: null, + stop: null, + }, + main: { + type: 'docker', + image: '', + system: true, + entrypoint: '', + args: [''], + mounts: { }, + 'io-format': DockerIoFormat.Yaml, + inject: false, + 'shm-size': '', + }, + 'health-check': { + type: 'docker', + image: '', + system: true, + entrypoint: '', + args: [''], + mounts: { }, + 'io-format': DockerIoFormat.Yaml, + inject: false, + 'shm-size': '', + }, + config: null, + volumes: { }, + 'min-os-version': '0.2.12', + interfaces: { + rpc: { + name: 'RPC interface', + description: 'Good for connecting to your node at a distance.', + ui: true, + 'tor-config': { + 'hidden-service-version': 'v3', + 'port-mapping': { }, + }, + 'lan-config': { + 44: { + ssl: true, + mapping: 33, + }, + }, + protocols: [], + }, + }, + backup: { + create: { + type: 'docker', + image: '', + system: true, + entrypoint: '', + args: [''], + mounts: { }, + 'io-format': DockerIoFormat.Yaml, + inject: false, + 'shm-size': '', + }, + restore: { + type: 'docker', + image: '', + system: true, + entrypoint: '', + args: [''], + mounts: { }, + 'io-format': DockerIoFormat.Yaml, + inject: false, + 'shm-size': '', + }, + }, + migrations: null, + actions: { }, + permissions: { }, + dependencies: { + 'bitcoind': { + version: '>=0.20.0', + description: 'Bitcoin Proxy requires a Bitcoin node.', + optional: null, + recommended: true, + config: [], + interfaces: [], + }, + }, + } + + export const AvailableShow: { + [id: string]: { + [version: string]: RR.GetAvailableShowRes + } + } = { + 'bitcoind': { + '0.19.0': { + icon: 'assets/img/service-icons/bitcoind.png', + manifest: { + ...Mock.MockManifestBitcoind, + version: '0.19.0', + 'release-notes': 'release notes for Bitcoin 0.19.0', + }, + categories: ['bitcoin', 'cryptocurrency'], + versions: ['0.19.0', '0.20.0', '0.21.0'], + 'dependency-metadata': { }, + }, + '0.20.0': { + icon: 'assets/img/service-icons/bitcoind.png', + manifest: { + ...Mock.MockManifestBitcoind, + version: '0.20.0', + 'release-notes': 'release notes for Bitcoin 0.20.0', + }, + categories: ['bitcoin', 'cryptocurrency'], + versions: ['0.19.0', '0.20.0', '0.21.0'], + 'dependency-metadata': { }, + }, + '0.21.0': { + icon: 'assets/img/service-icons/bitcoind.png', + manifest: { + ...Mock.MockManifestBitcoind, + version: '0.21.0', + 'release-notes': 'release notes for Bitcoin 0.20.0', + }, + categories: ['bitcoin', 'cryptocurrency'], + versions: ['0.19.0', '0.20.0', '0.21.0'], + 'dependency-metadata': { }, + }, + 'latest': { + icon: 'assets/img/service-icons/bitcoind.png', + manifest: Mock.MockManifestBitcoind, + categories: ['bitcoin', 'cryptocurrency'], + versions: ['0.19.0', '0.20.0', '0.21.0'], + 'dependency-metadata': { }, + }, + }, + 'lnd': { + '0.11.0': { + icon: 'assets/img/service-icons/lnd.png', + manifest: { + ...Mock.MockManifestLnd, + version: '0.11.0', + 'release-notes': 'release notes for LND 0.11.0', + }, + categories: ['bitcoin', 'lightning', 'cryptocurrency'], + versions: ['0.11.0', '0.11.1'], + 'dependency-metadata': { + 'bitcoind': { + title: 'Bitcoin Core', + icon: 'assets/img/service-icons/bitcoind.png', + }, + 'bitcoin-proxy': { + title: 'Bitcoin Proxy', + icon: 'assets/img/service-icons/bitcoin-proxy.png', + }, + }, + }, + '0.11.1': { + icon: 'assets/img/service-icons/lnd.png', + manifest: { + ...Mock.MockManifestLnd, + version: '0.11.1', + 'release-notes': 'release notes for LND 0.11.0', + }, + categories: ['bitcoin', 'lightning', 'cryptocurrency'], + versions: ['0.11.0', '0.11.1'], + 'dependency-metadata': { + 'bitcoind': { + title: 'Bitcoin Core', + icon: 'assets/img/service-icons/bitcoind.png', + }, + 'bitcoin-proxy': { + title: 'Bitcoin Proxy', + icon: 'assets/img/service-icons/bitcoin-proxy.png', + }, + }, + }, + 'latest': { + icon: 'assets/img/service-icons/lnd.png', + manifest: Mock.MockManifestLnd, + categories: ['bitcoin', 'lightning', 'cryptocurrency'], + versions: ['0.11.0', '0.11.1'], + 'dependency-metadata': { + 'bitcoind': { + title: 'Bitcoin Core', + icon: 'assets/img/service-icons/bitcoind.png', + }, + 'bitcoin-proxy': { + title: 'Bitcoin Proxy', + icon: 'assets/img/service-icons/bitcoin-proxy.png', + }, + }, + }, + }, + 'bitcoin-proxy': { + 'latest': { + icon: 'assets/img/service-icons/bitcoin-proxy.png', + manifest: Mock.MockManifestBitcoinProxy, + categories: ['bitcoin'], + versions: ['0.2.2'], + 'dependency-metadata': { + 'bitcoind': { + title: 'Bitcoin Core', + icon: 'assets/img/service-icons/bitcoind.png', + }, + }, + }, + }, + } + + export const bitcoind: PackageDataEntry = { + state: PackageState.Installed, + 'static-files': { + license: 'licenseURL', + icon: 'assets/img/service-icons/bitcoind.png', + instructions: markdown, // /public/package-data/bitcoind/0.21.1/INSTRUCTIONS.md + }, + 'temp-manifest': undefined, + installed: { + manifest: { + ...MockManifestBitcoind, + version: '0.20.0', + }, + status: { + configured: true, + main: { + status: PackageMainStatus.Running, + started: new Date().toISOString(), + health: { }, + }, + 'dependency-errors': { }, + }, + 'interface-info': { + ip: '10.0.0.1', + addresses: { + ui: { + 'tor-address': 'bitcoind-ui-address.onion', + 'lan-address': 'bitcoind-ui-address.local', + }, + rpc: { + 'tor-address': 'bitcoind-rpc-address.onion', + 'lan-address': 'bitcoind-rpc-address.local', + }, + p2p: { + 'tor-address': 'bitcoind-p2p-address.onion', + 'lan-address': 'bitcoind-p2p-address.local', + }, + }, + }, + 'system-pointers': [], + 'current-dependents': { + 'lnd': { + pointers: [], + 'health-checks': [], + }, + }, + 'current-dependencies': { }, + }, + 'install-progress': undefined, + } + + export const lnd: PackageDataEntry = { + state: PackageState.Installed, + 'static-files': { + license: 'licenseURL', + icon: 'assets/img/service-icons/lnd.png', + instructions: markdown, // /public/package-data/bitcoind/0.21.1/INSTRUCTIONS.md + }, + 'temp-manifest': undefined, + installed: { + manifest: MockManifestLnd, + status: { + configured: true, + main: { + status: PackageMainStatus.Stopped, + }, + 'dependency-errors': { + 'bitcoin-proxy': { + type: DependencyErrorType.NotInstalled, + title: Mock.MockManifestBitcoinProxy.title, + icon: 'assets/img/service-icons/bitcoin-proxy.png', + }, + }, + }, + 'interface-info': { + ip: '10.0.0.1', + addresses: { + rpc: { + 'tor-address': 'lnd-rpc-address.onion', + 'lan-address': 'lnd-rpc-address.local', + }, + grpc: { + 'tor-address': 'lnd-grpc-address.onion', + 'lan-address': 'lnd-grpc-address.local', + }, + }, + }, + 'system-pointers': [], + 'current-dependents': { }, + 'current-dependencies': { + 'bitcoind': { + pointers: [], + 'health-checks': [], + }, + 'bitcoin-proxy': { + pointers: [], + 'health-checks': [], + }, + }, + }, + 'install-progress': undefined, + } + + export const bitcoinproxy: PackageDataEntry = { + state: PackageState.Installed, + 'static-files': { + license: 'licenseURL', + icon: 'assets/img/service-icons/bitcoin-proxy.png', + instructions: '*These are some instructions.*', // /public/package-data/bitcoinproxy/0.2.2/INSTRUCTIONS.md + }, + 'temp-manifest': undefined, + installed: { + manifest: MockManifestBitcoinProxy, + status: { + configured: true, + main: { + status: PackageMainStatus.Running, + started: new Date().toISOString(), + health: { }, + }, + 'dependency-errors': { }, + }, + 'interface-info': { + ip: '10.0.0.1', + addresses: { + rpc: { + 'tor-address': 'bitcoinproxy-rpc-address.onion', + 'lan-address': 'bitcoinproxy-rpc-address.local', + }, + }, + }, + 'system-pointers': [], + 'current-dependents': { + 'lnd': { + pointers: [], + 'health-checks': [], + }, + }, + 'current-dependencies': { + 'bitcoind': { + pointers: [], + 'health-checks': [], + }, + }, + }, + 'install-progress': undefined, + } + + export const DbDump: RR.GetDumpRes = { + id: 1, + expireId: null, + value: { + 'server-info': { + id: 'start9-abcdefgmm', + version: '1.0.0', + status: ServerStatus.Running, + 'lan-address': 'start9-abcdefgh.local', + 'tor-address': 'myveryownspecialtoraddress.onion', + wifi: { + ssids: ['Goosers', 'Goosers5G'], + selected: 'Goosers5G', + connected: 'Goosers5G', + }, + registry: 'https://registry.start9.com', + 'unread-notification-count': 4, + specs: { + CPU: 'Cortex-A72: 4 Cores @1500MHz', + Disk: '1TB SSD', + Memory: '8GB', + }, + }, + 'package-data': { + 'bitcoind': bitcoind, + 'lnd': lnd, + }, + ui: { + 'server-name': 'My Embassy', + 'welcome-ack': '1.0.0', + 'auto-check-updates': true, + }, + }, + } + + export const notification1: ServerNotification<1> = { + id: '123e4567-e89b-12d3-a456-426655440000', + 'package-id': null, + 'created-at': '2019-12-26T14:20:30.872Z', + code: 1, + level: NotificationLevel.Success, + title: 'Backup Complete', + message: 'Embassy and services have been successfully backed up.', + data: { + server: { + attempted: true, + error: null, + }, + packages: { + 'bitcoind': { + error: null, + }, + }, + }, + } + + export const Notifications: ServerNotifications = [ + notification1, + { + id: '123e4567-e89b-12d3-a456-426655440001', + 'package-id': 'bitcoind', + 'created-at': '2019-12-26T14:20:30.872Z', + code: 2, + level: NotificationLevel.Warning, + title: 'SSH Key Added', + message: 'A new SSH key was added. If you did not do this, shit is bad.', + data: null, + }, + { + id: '123e4567-e89b-12d3-a456-426655440002', + 'package-id': 'bitcoind', + 'created-at': '2019-12-26T14:20:30.872Z', + code: 3, + level: NotificationLevel.Info, + title: 'SSH Key Removed', + message: 'A SSH key was removed.', + data: null, + }, + { + id: '123e4567-e89b-12d3-a456-426655440003', + 'package-id': 'bitcoind', + 'created-at': '2019-12-26T14:20:30.872Z', + code: 4, + level: NotificationLevel.Error, + title: 'Service Crashed', + message: 'Bitcoind has crashed.', + data: null, + }, + ] + + export const ServerMetrics: RR.GetServerMetricsRes = { + 'Group1': { + 'Metric1': { + value: 22.2, + unit: 'mi/b', + }, + 'Metric2': { + value: 50, + unit: '%', + }, + 'Metric3': { + value: 10.1, + unit: '%', + }, + }, + 'Group2': { + 'Hmmmm1': { + value: 22.2, + unit: 'mi/b', + }, + 'Hmmmm2': { + value: 50, + unit: '%', + }, + 'Hmmmm3': { + value: 10.1, + unit: '%', + }, + }, + } + + export const ServerLogs: RR.GetServerLogsRes = [ + { + timestamp: '2019-12-26T14:20:30.872Z', + log: '****** START *****', + }, + { + timestamp: '2019-12-26T14:21:30.872Z', + log: 'ServerLogs ServerLogs ServerLogs ServerLogs ServerLogs', + }, + { + timestamp: '2019-12-26T14:22:30.872Z', + log: '****** FINISH *****', + }, + ] + + export const PackageLogs: RR.GetPackageLogsRes = [ + { + timestamp: '2019-12-26T14:20:30.872Z', + log: '****** START *****', + }, + { + timestamp: '2019-12-26T14:21:30.872Z', + log: 'PackageLogs PackageLogs PackageLogs PackageLogs PackageLogs', + }, + { + timestamp: '2019-12-26T14:22:30.872Z', + log: '****** FINISH *****', + }, + ] + + export const SshKeys: RR.GetSSHKeysRes = { + '28:d2:7e:78:61:b4:bf:g2:de:24:15:96:4e:d4:15:53': { + alg: 'ed25519', + hostname: 'Matt Key', + hash: 'VeryLongHashOfSSHKey1', + }, + '12:f8:7e:78:61:b4:bf:e2:de:24:15:96:4e:d4:72:53': { + alg: 'ed25519', + hostname: 'Aiden Key', + hash: 'VeryLongHashOfSSHKey2', + }, + } + + export const SshKey: RR.AddSSHKeyRes = { + '44:44:7e:78:61:b4:bf:g2:de:24:15:96:4e:d4:15:53': { + alg: 'ed25519', + hostname: 'Lucy Key', + hash: 'VeryLongHashOfSSHKey3', + }, + } + + export const Disks: RR.GetDisksRes = { + '/dev/sda': { + size: '32GB', + description: 'Samsung', + partitions: { + 'sdba2': { + size: null, + 'is-mounted': false, + label: 'Matt Stuff', + }, + }, + }, + '/dev/sba': { + size: '64GB', + description: 'small USB stick', + partitions: { + 'sdba2': { + size: '16GB', + 'is-mounted': true, + label: null, + }, + }, + }, + '/dev/sbd': { + size: '128GB', + description: 'large USB stick', + partitions: { + 'sdba1': { + size: '32GB', + 'is-mounted': false, + label: 'Partition 1', + }, + 'sdba2': { + size: null, + 'is-mounted': true, + label: 'Partition 2', + }, + }, + }, + } + + export const PackageProperties: RR.GetPackagePropertiesRes<2> = { + version: 2, + data: { + 'Test': { + type: 'string', + description: 'This is some information about the thing.', + copyable: true, + qr: true, + masked: false, + value: 'lndconnect://udlyfq2mxa4355pt7cqlrdipnvk2tsl4jtsdw7zaeekenufwcev2wlad.onion:10009?cert=MIICJTCCAcugAwIBAgIRAOyq85fqAiA3U3xOnwhH678wCgYIKoZIzj0EAwIwODEfMB0GAkUEChMWbG5kIGF1dG9nZW5lcmF0ZWQgY2VydDEVMBMGA1UEAxMMNTc0OTkwMzIyYzZlMB4XDTIwMTAyNjA3MzEyN1oXDTIxMTIyMTA3MzEyN1owODEfMB0GA1UEChMWbG5kIGF1dG9nZW5lcmF0ZWQgY2VydDEVMBMGA1UEAxMMNTc0OTkwMzIyYzZlMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEKqfhAMMZdY-eFnU5P4bGrQTSx0lo7m8u4V0yYkzUM6jlql_u31_mU2ovLTj56wnZApkEjoPl6fL2yasZA2wiy6OBtTCBsjAOBgNVHQ8BAf8EBAMCAqQwEwYDVR0lBAwwCgYIKwYBBQUHAwEwDwYDVR0TAQH_BAUwAwEB_zAdBgNVHQ4EFgQUYQ9uIO6spltnVCx4rLFL5BvBF9IwWwYDVR0RBFQwUoIMNTc0OTkwMzIyYzZlgglsb2NhbGhvc3SCBHVuaXiCCnVuaXhwYWNrZXSCB2J1ZmNvbm6HBH8AAAGHEAAAAAAAAAAAAAAAAAAAAAGHBKwSAAswCgYIKoZIzj0EAwIDSAAwRQIgVZH2Z2KlyAVY2Q2aIQl0nsvN-OEN49wreFwiBqlxNj4CIQD5_JbpuBFJuf81I5J0FQPtXY-4RppWOPZBb-y6-rkIUQ&macaroon=AgEDbG5kAusBAwoQuA8OUMeQ8Fr2h-f65OdXdRIBMBoWCgdhZGRyZXNzEgRyZWFkEgV3cml0ZRoTCgRpbmZvEgRyZWFkEgV3cml0ZRoXCghpbnZvaWNlcxIEcmVhZBIFd3JpdGUaFAoIbWFjYXJvb24SCGdlbmVyYXRlGhYKB21lc3NhZ2USBHJlYWQSBXdyaXRlGhcKCG9mZmNoYWluEgRyZWFkEgV3cml0ZRoWCgdvbmNoYWluEgRyZWFkEgV3cml0ZRoUCgVwZWVycxIEcmVhZBIFd3JpdGUaGAoGc2lnbmVyEghnZW5lcmF0ZRIEcmVhZAAABiCYsRUoUWuAHAiCSLbBR7b_qULDSl64R8LIU2aqNIyQfA', + }, + 'Nested': { + type: 'object', + description: 'This is a nested thing metric', + value: { + 'Last Name': { + type: 'string', + description: 'The last name of the user', + copyable: true, + qr: true, + masked: false, + value: 'Hill', + }, + 'Age': { + type: 'string', + description: 'The age of the user', + copyable: false, + qr: false, + masked: false, + value: '35', + }, + 'Password': { + type: 'string', + description: 'A secret password', + copyable: true, + qr: false, + masked: true, + value: 'password123', + }, + }, + }, + 'Another Property': { + type: 'string', + description: 'Some more information about the service.', + copyable: false, + qr: true, + masked: false, + value: 'https://guessagain.com', + }, + }, + } as any // @TODO why is this necessary? + + export const PackageConfig: RR.GetPackageConfigRes = { + // config spec + spec: { + 'testnet': { + 'name': 'Testnet', + 'type': 'boolean', + 'description': 'determines whether your node is running on testnet or mainnet', + 'changeWarning': 'Chain will have to resync!', + 'default': false, + }, + 'objectList': { + 'name': 'Object List', + 'type': 'list', + 'subtype': 'object', + 'description': 'This is a list of objects, like users or something', + 'range': '[0,4]', + 'default': [ + { + 'firstName': 'Admin', + 'lastName': 'User', + 'age': 40, + }, + { + 'firstName': 'Admin2', + 'lastName': 'User', + 'age': 40, + }, + ], + // the outer spec here, at the list level, says that what's inside (the inner spec) pertains to its inner elements. + // it just so happens that ValueSpecObject's have the field { spec: ConfigSpec } + // see 'unionList' below for a different example. + 'spec': { + 'uniqueBy': 'lastName', + 'displayAs': `I'm {{lastName}}, {{firstName}} {{lastName}}`, + 'spec': { + 'firstName': { + 'name': 'First Name', + 'type': 'string', + 'description': 'User first name', + 'nullable': true, + 'default': null, + 'masked': false, + 'copyable': false, + }, + 'lastName': { + 'name': 'Last Name', + 'type': 'string', + 'description': 'User first name', + 'nullable': true, + 'default': { + 'charset': 'a-g,2-9', + 'len': 12, + }, + 'pattern': '^[a-zA-Z]+$', + 'patternDescription': 'must contain only letters.', + 'masked': false, + 'copyable': true, + }, + 'age': { + 'name': 'Age', + 'type': 'number', + 'description': 'The age of the user', + 'nullable': true, + 'default': null, + 'integral': false, + 'changeWarning': 'User must be at least 18.', + 'range': '[18,*)', + }, + }, + }, + }, + 'unionList': { + 'name': 'Union List', + 'type': 'list', + 'subtype': 'union', + 'description': 'This is a sample list of unions', + 'changeWarning': 'If you change this, things may work.', + // a list of union selections. e.g. 'summer', 'winter',... + 'default': [ + 'summer', + ], + 'range': '[0, 2]', + 'spec': { + 'tag': { + 'id': 'preference', + 'name': 'Preferences', + 'variantNames': { + 'summer': 'Summer', + 'winter': 'Winter', + 'other': 'Other', + }, + }, + // this default is used to make a union selection when a new list element is first created + 'default': 'summer', + 'variants': { + 'summer': { + 'favorite-tree': { + 'name': 'Favorite Tree', + 'type': 'string', + 'nullable': false, + 'description': 'What is your favorite tree?', + 'default': 'Maple', + 'masked': false, + 'copyable': false, + }, + 'favorite-flower': { + 'name': 'Favorite Flower', + 'type': 'enum', + 'description': 'Select your favorite flower', + 'valueNames': { + 'none': 'Hate Flowers', + 'red': 'Red', + 'blue': 'Blue', + 'purple': 'Purple', + }, + 'values': [ + 'none', + 'red', + 'blue', + 'purple', + ], + 'default': 'none', + }, + }, + 'winter': { + 'like-snow': { + 'name': 'Like Snow?', + 'type': 'boolean', + 'description': 'Do you like snow or not?', + 'default': true, + }, + }, + }, + 'uniqueBy': 'preference', + }, + }, + 'randomEnum': { + 'name': 'Random Enum', + 'type': 'enum', + 'valueNames': { + 'null': 'Null', + 'option1': 'One 1', + 'option2': 'Two 2', + 'option3': 'Three 3', + }, + 'default': 'null', + 'description': 'This is not even real.', + 'changeWarning': 'Be careful chnaging this!', + 'values': [ + 'null', + 'option1', + 'option2', + 'option3', + ], + }, + 'favoriteNumber': { + 'name': 'Favorite Number', + 'type': 'number', + 'integral': false, + 'description': 'Your favorite number of all time', + 'changeWarning': 'Once you set this number, it can never be changed without severe consequences.', + 'nullable': false, + 'default': 7, + 'range': '(-100,100]', + 'units': 'BTC', + }, + 'secondaryNumbers': { + 'name': 'Unlucky Numbers', + 'type': 'list', + 'subtype': 'number', + 'description': 'Numbers that you like but are not your top favorite.', + 'spec': { + 'integral': false, + 'range': '[-100,200)', + }, + 'range': '[0,10]', + 'default': [ + 2, + 3, + ], + }, + 'rpcsettings': { + 'name': 'RPC Settings', + 'type': 'object', + 'uniqueBy': null, + 'description': 'rpc username and password', + 'changeWarning': 'Adding RPC users gives them special permissions on your node.', + 'nullable': false, + 'nullByDefault': false, + 'spec': { + 'laws': { + 'name': 'Laws', + 'type': 'object', + 'uniqueBy': 'law1', + 'description': 'the law of the realm', + 'nullable': true, + 'nullByDefault': true, + 'spec': { + 'law1': { + 'name': 'First Law', + 'type': 'string', + 'description': 'the first law', + 'nullable': true, + 'masked': false, + 'copyable': true, + }, + 'law2': { + 'name': 'Second Law', + 'type': 'string', + 'description': 'the second law', + 'nullable': true, + 'masked': false, + 'copyable': true, + }, + }, + }, + 'rulemakers': { + 'name': 'Rule Makers', + 'type': 'list', + 'subtype': 'object', + 'description': 'the people who make the rules', + 'range': '[0,2]', + 'default': [], + 'spec': { + 'uniqueBy': null, + 'spec': { + 'rulemakername': { + 'name': 'Rulemaker Name', + 'type': 'string', + 'description': 'the name of the rule maker', + 'nullable': false, + 'default': { + 'charset': 'a-g,2-9', + 'len': 12, + }, + 'masked': false, + 'copyable': false, + }, + 'rulemakerip': { + 'name': 'Rulemaker IP', + 'type': 'string', + 'description': 'the ip of the rule maker', + 'nullable': false, + 'default': '192.168.1.0', + 'pattern': '^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$', + 'patternDescription': 'may only contain numbers and periods', + 'masked': false, + 'copyable': true, + }, + }, + }, + }, + 'rpcuser': { + 'name': 'RPC Username', + 'type': 'string', + 'description': 'rpc username', + 'nullable': false, + 'default': 'defaultrpcusername', + 'pattern': '^[a-zA-Z]+$', + 'patternDescription': 'must contain only letters.', + 'masked': false, + 'copyable': true, + }, + 'rpcpass': { + 'name': 'RPC User Password', + 'type': 'string', + 'description': 'rpc password', + 'nullable': false, + 'default': { + 'charset': 'a-z,A-Z,2-9', + 'len': 20, + }, + 'masked': true, + 'copyable': true, + }, + }, + }, + 'advanced': { + 'name': 'Advanced', + 'type': 'object', + 'uniqueBy': null, + 'description': 'Advanced settings', + 'nullable': false, + 'nullByDefault': false, + 'spec': { + 'notifications': { + 'name': 'Notification Preferences', + 'type': 'list', + 'subtype': 'enum', + 'description': 'how you want to be notified', + 'range': '[1,3]', + 'default': [ + 'email', + ], + 'spec': { + 'valueNames': { + 'email': 'EEEEmail', + 'text': 'Texxxt', + 'call': 'Ccccall', + 'push': 'PuuuusH', + 'webhook': 'WebHooookkeee', + }, + 'values': [ + 'email', + 'text', + 'call', + 'push', + 'webhook', + ], + }, + }, + }, + }, + 'bitcoinNode': { + 'name': 'Bitcoin Node Settings', + 'type': 'union', + 'uniqueBy': null, + 'description': 'The node settings', + 'default': 'internal', + 'changeWarning': 'Careful changing this', + 'tag': { + 'id': 'type', + 'name': 'Type', + 'variantNames': { + 'internal': 'Internal', + 'external': 'External', + }, + }, + 'variants': { + 'internal': { + 'lan-address': { + 'name': 'LAN Address', + 'type': 'pointer', + 'subtype': 'app', + 'target': 'lan-address', + 'app-id': 'bitcoind', + 'description': 'the lan address', + }, + }, + 'external': { + 'public-domain': { + 'name': 'Public Domain', + 'type': 'string', + 'description': 'the public address of the node', + 'nullable': false, + 'default': 'bitcoinnode.com', + 'pattern': '.*', + 'patternDescription': 'anything', + 'masked': false, + 'copyable': true, + }, + }, + }, + }, + 'port': { + 'name': 'Port', + 'type': 'number', + 'integral': true, + 'description': 'the default port for your Bitcoin node. default: 8333, testnet: 18333, regtest: 18444', + 'nullable': false, + 'default': 8333, + 'range': '[0, 9999]', + }, + 'favoriteSlogan': { + 'name': 'Favorite Slogan', + 'type': 'string', + 'description': 'You most favorite slogan in the whole world, used for paying you.', + 'nullable': true, + 'masked': true, + 'copyable': true, + }, + 'rpcallowip': { + 'name': 'RPC Allowed IPs', + 'type': 'list', + 'subtype': 'string', + 'description': 'external ip addresses that are authorized to access your Bitcoin node', + 'changeWarning': 'Any IP you allow here will have RPC access to your Bitcoin node.', + 'range': '[1,10]', + 'default': [ + '192.168.1.1', + ], + 'spec': { + 'pattern': '((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|((^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]).){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]).){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))$)|(^[a-z2-7]{16}\\.onion$)|(^([a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?\\.)+[a-z0-9][a-z0-9-]{0,61}[a-z0-9]$))', + 'patternDescription': 'must be a valid ipv4, ipv6, or domain name', + }, + }, + 'rpcauth': { + 'name': 'RPC Auth', + 'type': 'list', + 'subtype': 'string', + 'description': 'api keys that are authorized to access your Bitcoin node.', + 'range': '[0,*)', + 'default': [], + 'spec': { }, + }, + }, + // actual config + config: { + testnet: undefined, + objectList: undefined, + unionList: undefined, + randomEnum: 'option1', + favoriteNumber: 8, + secondaryNumbers: undefined, + rpcsettings: { + laws: null, + rpcpass: null, + rpcuser: '123', + rulemakers: [], + }, + advanced: { + notifications: ['call'], + }, + bitcoinNode: undefined, + port: 5959, + maxconnections: null, + rpcallowip: undefined, + rpcauth: ['matt: 8273gr8qwoidm1uid91jeh8y23gdio1kskmwejkdnm'], + }, + } + + export const mockCupsDependentConfig = { + randomEnum: 'option1', + testnet: false, + favoriteNumber: 8, + secondaryNumbers: [13, 58, 20], + objectList: [], + unionList: [], + rpcsettings: { + laws: null, + rpcpass: null, + rpcuser: '123', + rulemakers: [], + }, + advanced: { + notifications: [], + }, + bitcoinNode: { type: 'internal' }, + port: 5959, + maxconnections: null, + rpcallowip: [], + rpcauth: ['matt: 8273gr8qwoidm1uid91jeh8y23gdio1kskmwejkdnm'], } } - -export function toInstalledPreview (f: AppInstalledFull): AppInstalledPreview { - return { - id: f.id, - versionInstalled: f.versionInstalled, - status: f.status, - title: f.title, - iconURL: f.iconURL, - torAddress: f.torAddress, - lanAddress: f.lanAddress, - lanUi: f.lanUi, - torUi: f.torUi, - hasUI: f.hasUI, - launchable: f.launchable, - } -} - -export function toServiceRequirement (f: BaseApp, o: Omit): AppDependency { - return { - id: f.id, - title: f.title, - iconURL: f.iconURL, - ...o, - } -} - -export function toServiceBreakage (f: BaseApp): DependentBreakage { - return { - id: f.id, - title: f.title, - iconURL: f.iconURL, - } -} - -export const bitcoinI: ApiAppInstalledFull = { - id: 'bitcoind', - versionInstalled: '0.18.1', - lanAddress: undefined, - title: 'Bitcoin Core', - licenseName: 'MIT', - licenseLink: 'https://github.com/bitcoin/bitcoin/blob/master/COPYING', - torAddress: '4acth47i6kxnvkewtm6q7ib2s3ufpo5sqbsnzjpbi7utijcltosqemad.onion', - startAlert: 'Bitcoind could take a loooooong time to start. Please be patient.', - status: AppStatus.STOPPED, - iconURL: 'assets/img/service-icons/bitcoind.png', - instructions: 'some instructions', - lastBackup: new Date().toISOString(), - configuredRequirements: [], - lanUi: false, - torUi: false, - restoreAlert: 'if you restore this app horrible things will happen to the people you love.', - actions: [ - { id: 'sync-chain', name: 'Sync Chain', description: 'this will sync with the chain like from Avatar', allowedStatuses: [ AppStatus.RUNNING, AppStatus.RUNNING, AppStatus.RUNNING, AppStatus.RUNNING ]}, - { id: 'single-status-action', name: 'Single Status Action', description: 'This action has only one allowed status', allowedStatuses: [ AppStatus.RUNNING ]}, - { id: 'off-sync-chain', name: 'Off Sync Chain', description: 'this will off sync with the chain like from Avatar', allowedStatuses: [ AppStatus.STOPPED ]}, - ], -} - -export const lightningI: ApiAppInstalledFull = { - id: 'c-lightning', - lanAddress: 'lightningLan.local', - status: AppStatus.RUNNING, - title: 'C Lightning', - versionInstalled: '1.0.0', - torAddress: '4acth47i6kxnvkewtm6q7ib2s3ufpo5sqbsnzjpbi7utijcltosqemad.onion', - iconURL: 'assets/img/service-icons/c-lightning.png', - instructions: 'some instructions', - lastBackup: new Date().toISOString(), - configuredRequirements: [ - toServiceRequirement(bitcoinI, - { - optional: 'you don\'t reeeeelly need this', - default: true, - versionSpec: '>= 0.1.2', - description: 'lightning needs bitcoin', - violation: null, - }), - ], - lanUi: false, - torUi: true, - actions: [], -} - -export const cupsI: ApiAppInstalledFull = { - id: 'cups', - lanAddress: 'cupsLan.local', - versionInstalled: '2.1.0', - title: 'Cups Messenger', - torAddress: 'sample-cups-tor-address.onion', - status: AppStatus.BROKEN_DEPENDENCIES, - iconURL: 'assets/img/service-icons/cups.png', - - instructions: 'some instructions', - lastBackup: new Date().toISOString(), - uninstallAlert: 'This is A GREAT APP man, I just don\'t know', - configuredRequirements: [ - toServiceRequirement(lightningI, - { - optional: 'you don\'t reeeeelly need this', - default: true, - - versionSpec: '>= 0.1.2', - description: 'lightning needs bitcoin', - violation: { name: 'incompatible-version' }, - }), - toServiceRequirement(lightningI, - { - optional: 'you don\'t reeeeelly need this', - default: true, - - versionSpec: '>= 0.1.2', - description: 'lightning needs bitcoin', - violation: { name: 'incompatible-status', status: AppStatus.INSTALLING }, - }), - toServiceRequirement(lightningI, - { - optional: 'you don\'t reeeeelly need this', - default: true, - - versionSpec: '>= 0.1.2', - description: 'lightning needs bitcoin', - violation: { name: 'incompatible-config', ruleViolations: ['bro', 'seriously', 'fix this'] }, - }), - ], - lanUi: true, - torUi: true, - actions: [], -} - -export const bitcoinA: AppAvailableFull = { - latestVersionTimestamp: modulateTime(new Date(), 5 , 'seconds'), - id: 'bitcoind', - versionLatest: '0.19.1.1', - versionInstalled: '0.19.0', - licenseName: 'MIT', - licenseLink: 'https://github.com/bitcoin/bitcoin/blob/master/COPYING', - status: AppStatus.UNKNOWN, - title: 'Bitcoin Core', - descriptionShort: 'Bitcoin is an innovative payment network and new kind of money.', - iconURL: 'assets/img/service-icons/bitcoind.png', - releaseNotes: 'Bitcoin is an innovative payment network and new kind of money. Bitcoin utilizes a robust p2p network to garner decentralized consensus. Bitcoin is an innovative payment network and new kind of money. Bitcoin utilizes a robust p2p network to garner decentralized consensus. Bitcoin is an innovative payment network and new kind of money. Bitcoin utilizes a robust p2p network to garner decentralized consensus. Segit and more cool things!', - descriptionLong: 'Bitcoin is an innovative payment network and new kind of money. Bitcoin utilizes a robust p2p network to garner decentralized consensus.', - versions: ['0.19.1.1', '0.19.1', '0.19.0', '0.18.1', '0.17.0'], - versionViewing: '0.19.1', - serviceRequirements: [], -} - -export const lightningA: AppAvailableFull = { - latestVersionTimestamp: modulateTime(new Date(), 4 , 'seconds'), - id: 'c-lightning', - versionLatest: '1.0.1', - versionInstalled: null, - status: AppStatus.UNKNOWN, - title: 'C Lightning', - descriptionShort: 'Lightning is quick money things.', - iconURL: 'assets/img/service-icons/bitcoind.png', - releaseNotes: 'Finally it works', - descriptionLong: 'Lightning is an innovative payment network and new kind of money. Lightning utilizes a robust p2p network to garner decentralized consensus.', - versions: ['0.0.1', '0.8.0', '0.8.1', '1.0.0', '1.0.1'], - versionViewing: '1.0.1', - serviceRequirements: [ - toServiceRequirement(bitcoinA, { - optional: null, - default: true, - versionSpec: '>=0.19.0', - description: 'Lightning uses bitcoin under the hood', - violation: null, - }), - ], -} - -export const btcPayA: AppAvailableFull = { - latestVersionTimestamp: modulateTime(new Date(), 3 , 'seconds'), - id: 'btcPay', - versionLatest: '1.0.1', - versionInstalled: '1.0.1', - status: AppStatus.INSTALLING, - title: 'BTC Pay', - descriptionShort: 'BTC Pay is quick payment money things', - iconURL: 'assets/img/service-icons/bitcoind.png', - releaseNotes: 'Finally pay us Finally pay us Finally pay us Finally pay us Finally pay usFinally pay us', - descriptionLong: 'Btc Pay is an innovative payment network and new kind of money. Btc Pay utilizes a robust p2p network to garner decentralized consensus.', - versions: ['0.8.0', '0.8.1', '1.0.0', '1.0.1'], - versionViewing: '1.0.1', - serviceRequirements: [ - toServiceRequirement(bitcoinA, { - optional: null, - default: true, - versionSpec: '>0.19.0', - description: 'Lightning uses bitcoin under the hood', - violation: { name: 'incompatible-version' }, - }), - ], -} - -export const thunderA: AppAvailableFull = { - latestVersionTimestamp: modulateTime(new Date(), 2 , 'seconds'), - id: 'thunder', - versionLatest: '1.0.1', - versionInstalled: null, - status: AppStatus.UNKNOWN, - title: 'Thunder', - descriptionShort: 'Thunder is quick payment money things', - iconURL: 'assets/img/service-icons/bitcoind.png', - releaseNotes: 'Finally pay us', - descriptionLong: 'Thunder is an innovative payment network and new kind of money. Thunder utilizes a robust p2p network to garner decentralized consensus.', - versions: ['0.8.0', '0.8.1', '1.0.0', '1.0.1'], - versionViewing: '1.0.1', - installAlert: 'Oooooh you really might want to think twice about installing this...', - serviceRequirements: [ - toServiceRequirement(bitcoinA, { - optional: null, - default: true, - versionSpec: '>0.19.0', - description: 'Thunder uses bitcoin under the hood', - violation: { name: 'incompatible-version' }, - }), - toServiceRequirement(lightningA, { - optional: null, - default: true, - versionSpec: '>=1.0.1', - description: 'Thunder uses lightning under the hood', - violation: { name: 'incompatible-version' }, - }), - toServiceRequirement(btcPayA, { - optional: 'Can be configured to use chase bank instead', - default: true, - versionSpec: '>=1.0.1', - description: 'Thunder can use btcpay under the hood', - violation: { name: 'missing' }, - }), - toServiceRequirement(btcPayA, { - optional: 'Can be configured to use chase bank instead', - default: true, - versionSpec: '>=1.0.1', - description: 'Thunder can use btcpay under the hood', - violation: { name: 'incompatible-status', status: AppStatus.INSTALLING }, - }), - ], -} - -export const cupsA: AppAvailableFull = { - id: 'cups', - versionLatest: '2.1.0', - versionInstalled: '2.1.0', - latestVersionTimestamp: new Date(), - status: AppStatus.RUNNING, - title: 'Cups Messenger', - descriptionShort: 'P2P encrypted messaging over Tor.', - iconURL: 'assets/img/service-icons/cups.png', - releaseNotes: 'Segit and more cool things!', - descriptionLong: 'Bitcoin is an innovative payment network and new kind of money. Bitcoin utilizes a robust p2p network to garner decentralized consensus.', - versions: ['0.1.0', '0.1.1', '0.1.2', '1.0.0', '2.0.0', '2.1.0'], - versionViewing: '2.1.0', - serviceRequirements: [], -} - -export const bitwardenA: AppAvailableFull = { - id: 'bitwarden', - versionLatest: '0.1.1', - versionInstalled: null, - latestVersionTimestamp: modulateTime(new Date(), 1 , 'seconds'), - status: null, - title: 'Bitwarden', - descriptionShort: `Self-hosted password manager`, - iconURL: 'assets/img/service-icons/bitwarden.png', - releaseNotes: 'Passwords and shite!', - descriptionLong: 'Bitwarden is fun.', - versions: ['0.19.0', '0.18.1', '0.17.0'], - versionViewing: '0.1.1', - serviceRequirements: [ - toServiceRequirement(cupsA, { - optional: 'Can be configured to use chase bank instead', - default: true, - versionSpec: '>=1.0.0', - description: 'cups does great stuff for bitwarden', - violation: { name: 'incompatible-config', ruleViolations: ['change this value to that value', 'change this second value to something better']}, - }), - ], -} - -export const mockApiAppAvailableFull: { [appId: string]: AppAvailableFull; } = { - bitcoind: bitcoinA, - 'c-lightning': lightningA, - btcPay: btcPayA, - thunder: thunderA, - cups: cupsA, - bitwarden: bitwardenA, -} - -export const mockApiAppInstalledFull: { [appId: string]: ApiAppInstalledFull; } = { - bitcoind: bitcoinI, - cups: cupsI, - lightning: lightningI, -} - -export const mockApiAppAvailableVersionInfo: AppAvailableVersionSpecificInfo = { - releaseNotes: 'Some older release notes that are not super important anymore.', - serviceRequirements: [], - versionViewing: '0.2.0', -} - -export const mockAppDependentBreakages: { breakages: DependentBreakage[] } = { - breakages: [ - toServiceBreakage(bitcoinI), - toServiceBreakage(cupsA), - ], -} diff --git a/ui/src/app/services/auth.service.ts b/ui/src/app/services/auth.service.ts index 31aed59c1..7e9d0802f 100644 --- a/ui/src/app/services/auth.service.ts +++ b/ui/src/app/services/auth.service.ts @@ -1,9 +1,7 @@ import { Injectable } from '@angular/core' -import { BehaviorSubject, Subscription } from 'rxjs' +import { BehaviorSubject, Observable } from 'rxjs' import { distinctUntilChanged } from 'rxjs/operators' import { ApiService } from './api/api.service' -import { chill } from '../util/misc.util' -import { isUnauthorized } from '../util/web.util' import { Storage } from '@ionic/storage' import { StorageKeys } from '../models/storage-keys' @@ -16,47 +14,41 @@ export enum AuthState { providedIn: 'root', }) export class AuthService { - private readonly $authState$: BehaviorSubject = new BehaviorSubject(AuthState.INITIALIZING) + private readonly authState$: BehaviorSubject = new BehaviorSubject(AuthState.INITIALIZING) constructor ( private readonly api: ApiService, private readonly storage: Storage, - ) { } - - peek (): AuthState { return this.$authState$.getValue() } - listen (callback: Partial<{ [k in AuthState]: () => any }>): Subscription { - return this.$authState$.pipe(distinctUntilChanged()).subscribe(s => { - return (callback[s] || chill)() - }) + ) { + this.storage.create() } - async login (password: string) { - try { - await this.api.postLogin(password) - await this.storage.set(StorageKeys.LOGGED_IN_KEY, true) - this.$authState$.next(AuthState.VERIFIED) - } catch (e) { - if (isUnauthorized(e)) { - this.$authState$.next(AuthState.UNVERIFIED) - throw { name: 'invalid', message: 'invalid credentials' } - } - console.error(`Failed login attempt`, e) - throw e - } - } - - async restoreCache (): Promise { + async init (): Promise { const loggedIn = await this.storage.get(StorageKeys.LOGGED_IN_KEY) if (loggedIn) { - this.$authState$.next(AuthState.VERIFIED) + this.authState$.next(AuthState.VERIFIED) return AuthState.VERIFIED } else { - this.$authState$.next(AuthState.UNVERIFIED) + this.authState$.next(AuthState.UNVERIFIED) return AuthState.UNVERIFIED } } - async setAuthStateUnverified (): Promise { - this.$authState$.next(AuthState.UNVERIFIED) + watch$ (): Observable { + return this.authState$.pipe(distinctUntilChanged()) + } + + async submitPin (pin: string): Promise { + await this.api.submitPin({ pin }) + } + + async submitPassword (password: string): Promise { + await this.api.submitPassword({ password }) + await this.storage.set(StorageKeys.LOGGED_IN_KEY, true) + this.authState$.next(AuthState.VERIFIED) + } + + async setUnverified (): Promise { + this.authState$.next(AuthState.UNVERIFIED) } } diff --git a/ui/src/app/services/config.service.ts b/ui/src/app/services/config.service.ts index 91e9369b3..402a078f0 100644 --- a/ui/src/app/services/config.service.ts +++ b/ui/src/app/services/config.service.ts @@ -1,12 +1,30 @@ import { Injectable } from '@angular/core' -import { AppStatus } from '../models/app-model' -import { ApiAppInstalledPreview } from './api/api-types' +import { InstalledPackageDataEntry, InterfaceDef, Manifest, PackageDataEntry, PackageMainStatus, PackageState } from '../models/patch-db/data-model' -const { useMocks, mockOver, skipStartupAlerts } = require('../../../use-mocks.json') as UseMocks +const { patchDb, maskAs, api, skipStartupAlerts } = require('../../../ui-config.json') as UiConfig -type UseMocks = { - useMocks: boolean - mockOver: 'tor' | 'lan' +type UiConfig = { + patchDb: { + // If this is false (the default), poll will be used if in consulate only. If true it will be on regardless of env. This is useful in concert with api mocks. + usePollOverride: boolean + poll: { + cooldown: number /* in ms */ + } + websocket: { + type: 'ws' + url: string + version: number + } + // Wait this long (ms) before asking BE for a dump when out of order messages are received + timeoutForMissingRevision: number + } + api: { + mocks: boolean + url: string + version: string + root: string + } + maskAs: 'tor' | 'lan' | 'none' skipStartupAlerts: boolean } @Injectable({ @@ -16,33 +34,74 @@ export class ConfigService { origin = removePort(removeProtocol(window.origin)) version = require('../../../package.json').version - api = { - useMocks, - url: '/api', - version: '/v0', - root: '', // empty will default to same origin - } + patchDb = patchDb + api = api skipStartupAlerts = skipStartupAlerts isConsulate = window['platform'] === 'ios' isTor () : boolean { - return (this.api.useMocks && mockOver === 'tor') || this.origin.endsWith('.onion') + return (maskAs === 'tor') || this.origin.endsWith('.onion') } - hasUI (app: ApiAppInstalledPreview): boolean { - return app.lanUi || app.torUi + isLan () : boolean { + return (maskAs === 'lan') || this.origin.endsWith('.local') } - isLaunchable (app: ApiAppInstalledPreview): boolean { - return !this.isConsulate && - app.status === AppStatus.RUNNING && - ( - (app.torAddress && app.torUi && this.isTor()) || - (app.lanAddress && app.lanUi && !this.isTor()) - ) + isLaunchable (pkg: PackageDataEntry): boolean { + if (this.isConsulate || pkg.state !== PackageState.Installed) { + return false + } + + const installed = pkg.installed + + return installed.status.main.status === PackageMainStatus.Running && + ( + (hasTorUi(installed.manifest.interfaces) && this.isTor()) || + (hasLanUi(installed.manifest.interfaces) && !this.isTor()) + ) } + launchableURL (pkg: InstalledPackageDataEntry): string { + return this.isTor() ? `http://${torUiAddress(pkg)}` : `https://${lanUiAddress(pkg)}` + } +} + +export function hasTorUi (interfaces: { [id: string]: InterfaceDef }): boolean { + return !!Object.values(interfaces).find(i => i.ui && i['tor-config']) +} + +export function hasLanUi (interfaces: { [id: string]: InterfaceDef }): boolean { + return !!Object.values(interfaces).find(i => i.ui && i['lan-config']) +} + +export function torUiAddress (pkg: InstalledPackageDataEntry): string { + const interfaces = pkg.manifest.interfaces + const id = Object.keys(interfaces).find(key => { + const val = interfaces[key] + return val.ui && val['tor-config'] + }) + return pkg['interface-info'].addresses[id]['tor-address'] +} + +export function lanUiAddress (pkg: InstalledPackageDataEntry): string { + const interfaces = pkg.manifest.interfaces + const id = Object.keys(interfaces).find(key => { + const val = interfaces[key] + return val.ui && val['lan-config'] + }) + return pkg['interface-info'].addresses[id]['lan-address'] +} + +export function hasUi (interfaces: { [id: string]: InterfaceDef }): boolean { + return hasTorUi(interfaces) || hasLanUi(interfaces) +} + +export function getManifest (pkg: PackageDataEntry): Manifest { + if (pkg.state === PackageState.Installed) { + return pkg.installed.manifest + } + return pkg['temp-manifest'] } function removeProtocol (str: string): string { diff --git a/ui/src/app/services/connection.service.ts b/ui/src/app/services/connection.service.ts new file mode 100644 index 000000000..c28d3dc5f --- /dev/null +++ b/ui/src/app/services/connection.service.ts @@ -0,0 +1,105 @@ +import { Injectable } from '@angular/core' +import { fromEvent, Observable, Subject, Subscription, timer } from 'rxjs' +import { debounceTime, delay, retryWhen, startWith, switchMap, tap } from 'rxjs/operators' +import { ApiService } from './api/api.service' + +@Injectable({ + providedIn: 'root', +}) +export class ConnectionService { + private offlineSubscription: Subscription + private onlineSubscription: Subscription + private httpSubscription: Subscription + private readonly currentState: ConnectionState = { + network: true, + internet: true, + } + private readonly stateChangeEventEmitter = new Subject() + + constructor ( + private readonly apiService: ApiService, + ) { + this.checkNetworkState() + this.checkInternetState() + } + + ngOnDestroy (): void { + try { + this.offlineSubscription.unsubscribe() + this.onlineSubscription.unsubscribe() + this.httpSubscription.unsubscribe() + } catch (e) { + console.error(e.message) + } + } + + /** + * Monitor Network & Internet connection status by subscribing to this observer. + */ + monitor$ (): Observable { + return this.stateChangeEventEmitter.pipe( + debounceTime(300), + startWith(this.currentState), + ) + } + + private checkNetworkState (): void { + this.onlineSubscription = fromEvent(window, 'online').subscribe(() => { + this.currentState.network = true + this.checkInternetState() + this.emitEvent() + }) + + this.offlineSubscription = fromEvent(window, 'offline').subscribe(() => { + this.currentState.network = true + this.checkInternetState() + this.emitEvent() + }) + } + + private checkInternetState (): void { + + if (this.httpSubscription) { + this.httpSubscription.unsubscribe() + } + + // ping server every 10 seconds + this.httpSubscription = timer(0, 10000) + .pipe( + switchMap(() => this.apiService.ping()), + retryWhen(errors => + errors.pipe( + tap(val => { + console.error('Ping error: ', val) + this.currentState.internet = true + this.emitEvent() + }), + // restart after 2 seconds + delay(2000), + ), + ), + ) + .subscribe(() => { + this.currentState.internet = true + this.emitEvent() + }) + } + + private emitEvent (): void { + this.stateChangeEventEmitter.next(this.currentState) + } +} + +/** + * Instance of this interface is used to report current connection status. + */ + export interface ConnectionState { + /** + * "True" if browser has network connection. Determined by Window objects "online" / "offline" events. + */ + network: boolean + /** + * "True" if browser has Internet access. Determined by heartbeat system which periodically makes request to heartbeat Url. + */ + internet: boolean +} \ No newline at end of file diff --git a/ui/src/app/services/http.service.ts b/ui/src/app/services/http.service.ts index 3960217ff..50365766a 100644 --- a/ui/src/app/services/http.service.ts +++ b/ui/src/app/services/http.service.ts @@ -1,32 +1,49 @@ import { Injectable } from '@angular/core' -import { HttpClient, HttpHeaders, HttpParams } from '@angular/common/http' -import { Observable, from, interval, race } from 'rxjs' +import { HttpClient, HttpErrorResponse, HttpHeaders, HttpParams } from '@angular/common/http' +import { Observable, from, interval, race, Subject } from 'rxjs' import { map, take } from 'rxjs/operators' import { ConfigService } from './config.service' +import { Revision } from 'patch-db-client' @Injectable({ providedIn: 'root', }) export class HttpService { + private unauthorizedApiResponse$ = new Subject() + authReqEnabled: boolean = false + rootUrl: string + constructor ( private readonly http: HttpClient, private readonly config: ConfigService, - ) { } - - get raw () : HttpClient { - return this.http + ) { + const { url, version } = this.config.api + this.rootUrl = `${url}/${version}` } - async serverRequest (options: HttpOptions, overrides: Partial<{ version: string }> = { }): Promise { - options.url = leadingSlash(`${this.config.api.url}${exists(overrides.version) ? overrides.version : this.config.api.version}${options.url}`) - if ( this.config.api.root && this.config.api.root !== '' ) { - options.url = `${this.config.api.root}${options.url}` + watch401$ (): Observable<{ }> { + return this.unauthorizedApiResponse$.asObservable() + } + + async rpcRequest (rpcOpts: RPCOptions): Promise { + rpcOpts.params = rpcOpts.params || { } + const httpOpts = { + method: Method.POST, + data: rpcOpts, + url: '', } - return this.request(options) + + const res = await this.httpRequest>(httpOpts) + + if (isRpcError(res)) throw new RpcError(res.error) + + if (isRpcSuccess(res)) return res.result } - async request (httpOpts: HttpOptions): Promise { - const { url, body, timeout, ...rest} = translateOptions(httpOpts) + async httpRequest (httpOpts: HttpOptions): Promise { + let { url, body, timeout, ...rest} = translateOptions(httpOpts) + url = this.rootUrl + url + let req: Observable<{ body: T }> switch (httpOpts.method){ case Method.GET: req = this.http.get(url, rest) as any; break @@ -37,25 +54,42 @@ export class HttpService { } return (timeout ? withTimeout(req, timeout) : req) - .toPromise() - .then(res => res.body) - .catch(e => { console.error(e); throw humanReadableErrorMessage(e)}) + .toPromise() + .then(res => res.body) + .catch(e => { throw new HttpError(e) }) } } -function humanReadableErrorMessage (e: any): Error { - // server up, custom backend error - if (e.error && e.error.message) return { ...e, message: e.error.message } - if (e.message) return { ...e, message: e.message } - if (e.status && e.statusText) return { ...e, message: `${e.status} ${e.statusText}` } - return { ...e, message: `Unidentifiable HTTP exception` } +function RpcError (e: RPCError['error']): void { + const { code, message } = e + this.status = code + this.message = message + if (typeof e.data === 'string') { + throw new Error(`unexpected response for RPC Error data: ${e.data}`) + } + const data = e.data || { message: 'unknown RPC error', revision: null } + this.data = { ...data, code } } -function leadingSlash (url: string): string { - let toReturn = url - toReturn = toReturn.startsWith('/') ? toReturn : '/' + toReturn - toReturn = !toReturn.endsWith('/') ? toReturn : toReturn.slice(0, -1) - return toReturn +function HttpError (e: HttpErrorResponse): void { + const { status, statusText, error } = e + this.status = status + this.message = statusText + this.data = error || { } // error = { code: string, message: string } +} + +function isRpcError (arg: { error: Error } | { result: Result}): arg is { error: Error } { + return !!(arg as any).error +} + +function isRpcSuccess (arg: { error: Error } | { result: Result}): arg is { result: Result } { + return !!(arg as any).result +} + +export interface RequestError { + status: number + message: string + data: { code: string, message: string, revision: Revision | null } } export enum Method { @@ -66,27 +100,64 @@ export enum Method { DELETE = 'DELETE', } +export interface RPCOptions { + method: string + // @TODO what are valid params? object, bool? + params?: { + [param: string]: string | number | boolean | object | string[] | number[]; + } +} + +interface RPCBase { + jsonrpc: '2.0' + id: string +} + +export interface RPCRequest extends RPCBase { + method: string + params?: T +} + +export interface RPCSuccess extends RPCBase { + result: T +} + +export interface RPCError extends RPCBase { + error: { + code: number, + message: string + data?: { + message: string + revision: Revision | null + } | string + } +} + +export type RPCResponse = RPCSuccess | RPCError + +type HttpError = HttpErrorResponse & { error: { code: string, message: string } } + export interface HttpOptions { withCredentials?: boolean - url: string method: Method params?: { - [param: string]: string | string[]; + [param: string]: string | string[] } data?: any headers?: { [key: string]: string; } + url: string readTimeout?: number } export interface HttpJsonOptions { headers?: HttpHeaders | { - [header: string]: string | string[]; + [header: string]: string | string[] } observe: 'events' params?: HttpParams | { - [param: string]: string | string[]; + [param: string]: string | string[] } reportProgress?: boolean responseType?: 'json' @@ -116,7 +187,3 @@ function withTimeout (req: Observable, timeout: number): Observable { interval(timeout).pipe(take(1), map(() => { throw new Error('timeout') })), ) } - -function exists (str?: string): boolean { - return !!str || str === '' -} \ No newline at end of file diff --git a/ui/src/app/services/os-update.service.ts b/ui/src/app/services/os-update.service.ts deleted file mode 100644 index 5aa27defd..000000000 --- a/ui/src/app/services/os-update.service.ts +++ /dev/null @@ -1,69 +0,0 @@ -import { Injectable } from '@angular/core' -import { NavController } from '@ionic/angular' -import { BehaviorSubject, forkJoin, Observable, of } from 'rxjs' -import { catchError, concatMap, distinctUntilChanged, map, take, tap } from 'rxjs/operators' -import { ServerModel, ServerStatus } from '../models/server-model' -import { ApiService } from './api/api.service' -import { Emver } from './emver.service' - - -// call checkForUpdates in marketplace pages, can subscribe globally however -type UpdateAvailable = { versionLatest: string, releaseNotes: string} -@Injectable({ providedIn: 'root' }) -export class OsUpdateService { - // holds version latest if update available, undefined if not. - private readonly $updateAvailable$ = new BehaviorSubject(undefined) - - watchForUpdateAvailable$ (): Observable { - return this.$updateAvailable$.asObservable().pipe(distinctUntilChanged()) - } - - constructor ( - private readonly emver: Emver, - private readonly serverModel: ServerModel, - private readonly apiService: ApiService, - private readonly navCtrl: NavController, - ) { } - - // emits the latest version or re-checks to see if there's a new latest version - checkWhenNotAvailable$ (): Observable { - return this.$updateAvailable$.pipe( - take(1), - concatMap(vl => vl ? of(vl) : this.checkForUpdates$()), - ) - } - - // can sub to this imperatively and take the return value as gospel, or watch the $updateAvailable$ subject for the same info. - checkForUpdates$ (): Observable { - return forkJoin([ - this.serverModel.watch().versionInstalled.pipe(take(1)), - this.apiService.getVersionLatest(), - ]).pipe( - map(([vi, vl]) => this.updateIsAvailable(vi, vl) ? vl : undefined), - catchError(e => { - console.error(`OsUpdateService Error: ${e}`) - return of(undefined) - }), - // cache the result for components to learn update available without having to have called this method - tap(this.$updateAvailable$), - ) - } - - updateIsAvailable (vi: string, vl: UpdateAvailable): boolean { - if (!vi || !vl) return false - if (this.emver.compare(vi, vl.versionLatest) === -1) { - this.$updateAvailable$.next(vl) - return true - } else { - this.$updateAvailable$.next(undefined) - return false - } - } - - async updateEmbassyOS (versionLatest: string): Promise { - await this.apiService.updateAgent(versionLatest) - this.serverModel.update({ status: ServerStatus.UPDATING }) - this.$updateAvailable$.next(undefined) - await this.navCtrl.navigateRoot('/embassy') - } -} diff --git a/ui/src/app/services/pkg-status-rendering.service.ts b/ui/src/app/services/pkg-status-rendering.service.ts new file mode 100644 index 000000000..7c5ffc731 --- /dev/null +++ b/ui/src/app/services/pkg-status-rendering.service.ts @@ -0,0 +1,58 @@ +import { PackageDataEntry, PackageMainStatus, PackageState, Status } from '../models/patch-db/data-model' +import { ConnectionState } from './connection.service' + +export function renderPkgStatus (pkg: PackageDataEntry, connection: ConnectionState): PkgStatusRendering { + if (!connection.network || !connection.internet) { + return { display: 'Connecting', color: 'medium', showDots: true, feStatus: FEStatus.Connecting } + } + + switch (pkg.state) { + case PackageState.Installing: return { display: 'Installing', color: 'primary', showDots: true, feStatus: FEStatus.Installing } + case PackageState.Updating: return { display: 'Updating', color: 'primary', showDots: true, feStatus: FEStatus.Updating } + case PackageState.Removing: return { display: 'Removing', color: 'warning', showDots: true, feStatus: FEStatus.Removing } + case PackageState.Installed: return handleInstalledState(pkg.installed.status) + } +} + +function handleInstalledState (status: Status): PkgStatusRendering { + if (!status.configured) { + return { display: 'Needs Config', color: 'warning', showDots: false, feStatus: FEStatus.NeedsConfig } + } + + if (Object.values(status['dependency-errors']).length) { + return { display: 'Dependency Issue', color: 'warning', showDots: false, feStatus: FEStatus.DependencyIssue } + } + + switch (status.main.status) { + case PackageMainStatus.Running: return { display: 'Running', color: 'success', showDots: false, feStatus: FEStatus.Running } + case PackageMainStatus.Stopping: return { display: 'Stopping', color: 'dark', showDots: true, feStatus: FEStatus.Stopping } + case PackageMainStatus.Stopped: return { display: 'Stopped', color: 'medium', showDots: false, feStatus: FEStatus.Stopped } + case PackageMainStatus.BackingUp: return { display: 'Backing Up', color: 'warning', showDots: true, feStatus: FEStatus.BackingUp } + case PackageMainStatus.Restoring: return { display: 'Restoring', color: 'primary', showDots: true, feStatus: FEStatus.Restoring } + } +} + +export interface PkgStatusRendering { + feStatus: FEStatus + display: string + color: string + showDots: boolean +} + +// aggregate of all pkg statuses, except for Installed, which implies a "main" or "FE" status +export enum FEStatus { + // pkg + Installing = 'installing', + Updating = 'updating', + Removing = 'removing', + // main + Running = 'running', + Stopping = 'stopping', + Stopped = 'stopped', + BackingUp = 'backing-up', + Restoring = 'restoring', + // FE + Connecting = 'connecting', + DependencyIssue = 'dependency-issue', + NeedsConfig = 'needs-config', +} diff --git a/ui/src/app/services/pwa-back.service.ts b/ui/src/app/services/pwa-back.service.ts deleted file mode 100644 index d4681a0ac..000000000 --- a/ui/src/app/services/pwa-back.service.ts +++ /dev/null @@ -1,23 +0,0 @@ -import { Router } from '@angular/router' -import { Injectable } from '@angular/core' -import { NavController } from '@ionic/angular' - -@Injectable({ - providedIn: 'root', -}) -export class PwaBackService { - constructor ( - private readonly router: Router, - private readonly nav: NavController, - ) { } - - // this will strip an entry from the path on navigation - back () { - return this.nav.back() - // this.router.navigate() - // const path = this.router.url.split('/').filter(a => a !== '') - // path.pop() - // this.router.navigate(['/', ...path], { replaceUrl: false }) - } -} - diff --git a/ui/src/app/services/server-config.service.ts b/ui/src/app/services/server-config.service.ts index f3c8274b3..d37d7783b 100644 --- a/ui/src/app/services/server-config.service.ts +++ b/ui/src/app/services/server-config.service.ts @@ -2,124 +2,108 @@ import { Injectable } from '@angular/core' import { ModalController } from '@ionic/angular' import { AppConfigValuePage } from '../modals/app-config-value/app-config-value.page' import { ApiService } from './api/api.service' -import { PropertySubject } from '../util/property-subject.util' -import { S9Server, ServerModel } from '../models/server-model' -import { ValueSpec } from '../app-config/config-types' +import { ConfigSpec } from '../pkg-config/config-types' +import { ConfigCursor } from '../pkg-config/config-cursor' +import { SSHService } from '../pages/server-routes/developer-routes/dev-ssh-keys/ssh.service' @Injectable({ providedIn: 'root', }) export class ServerConfigService { - server: PropertySubject constructor ( private readonly modalCtrl: ModalController, private readonly apiService: ApiService, - private readonly serverModel: ServerModel, - ) { - this.server = this.serverModel.watch() - } + private readonly sshService: SSHService, + ) { } + + async presentModalValueEdit (key: string, current?: string) { + const cursor = new ConfigCursor(serverConfig, { [key]: current }).seekNext(key) - async presentModalValueEdit (key: string, add = false) { const modal = await this.modalCtrl.create({ backdropDismiss: false, component: AppConfigValuePage, presentingElement: await this.modalCtrl.getTop(), componentProps: { - ...this.getConfigSpec(key), - value: add ? '' : this.server[key].getValue(), + cursor, + saveFn: this.saveFns[key], }, }) await modal.present() } - private getConfigSpec (key: string): SpecAndSaveFn { - const configSpec: { [key: string]: SpecAndSaveFn } = { - name: { - spec: { - type: 'string', - name: 'Device Name', - description: 'A unique label for this device.', - nullable: false, - // @TODO determine regex - // pattern: '', - patternDescription: 'Must be less than 40 characters', - masked: false, - copyable: true, - }, - saveFn: (val: string) => { - return this.apiService.patchServerConfig('name', val).then(() => this.serverModel.update({ name: val })) - }, - }, - autoCheckUpdates: { - spec: { - type: 'boolean', - name: 'Auto Check for Updates', - description: 'On launch, EmabssyOS will automatically check for updates of itself and your installed services. Updating still requires user approval and action. No updates will ever be performed automatically.', - default: true, - }, - saveFn: (val: boolean) => { - return this.apiService.patchServerConfig('autoCheckUpdates', val).then(() => this.serverModel.update({ autoCheckUpdates: val })) - }, - }, - // password: { - // spec: { - // type: 'string', - // name: 'Change Password', - // description: 'The master password for your Embassy. Must contain at least 128 bits of entropy.', - // nullable: false, - // // @TODO figure out how to confirm min entropy - // // pattern: '^(?=.*[0-9])(?=.*[a-z])(?=.*[A-Z])(?=.*[*.!@#$%^&*\]).{12,32}$', - // patternDescription: 'Password too simple. Password must contain at least 128 bits of entroy.', - // changeWarning: 'Changing your password will have no affect on old backups. In order to restore old backups, you must provide the password that was used to create them.', - // masked: true, - // copyable: true, - // }, - // saveFn: (val: string) => { - // return this.apiService.patchServerConfig('password', val) - // }, - // }, - // alternativeRegistryUrl: { - // spec: { - // type: 'string', - // name: 'Marketplace URL', - // description: 'Used for connecting to an alternative service marketplace.', - // nullable: true, - // // @TODO regex for URL - // // pattern: '', - // patternDescription: 'Must be a valid URL', - // changeWarning: 'Downloading services from an alternative marketplace could result in malicious or harmful code being installed on your device.', - // masked: false, - // copyable: true, - // }, - // saveFn: (val: string) => { - // return this.apiService.patchServerConfig('alternativeRegistryUrl', val).then(() => this.serverModel.update({ alternativeRegistryUrl: val })) - // }, - // }, - ssh: { - spec: { - type: 'string', - name: 'SSH Key', - description: 'Add SSH keys to your Embassy to gain root access from the command line.', - nullable: false, - // @TODO regex for SSH Key - // pattern: '', - patternDescription: 'Must be a valid SSH key', - masked: true, - copyable: true, - }, - saveFn: (val: string) => { - return this.apiService.addSSHKey(val) - }, - }, - } - - return configSpec[key] + saveFns: { [key: string]: (val: any) => Promise } = { + name: async (value: string) => { + return this.apiService.setDbValue({ pointer: 'ui/name', value }) + }, + autoCheckUpdates: async (value: boolean) => { + return this.apiService.setDbValue({ pointer: 'ui/auto-check-updates', value }) + }, + ssh: async (pubkey: string) => { + return this.sshService.add(pubkey) + }, + registry: async (url: string) => { + return this.apiService.setRegistry({ url }) + }, + // password: async (password: string) => { + // return this.apiService.updatePassword({ password }) + // }, } } -interface SpecAndSaveFn { - spec: ValueSpec - saveFn: (val: any) => Promise +const serverConfig: ConfigSpec = { + name: { + type: 'string', + name: 'Device Name', + description: 'A unique label for this device.', + nullable: false, + // @TODO determine regex + // pattern: '', + patternDescription: 'Must be less than 40 characters', + masked: false, + copyable: false, + }, + autoCheckUpdates: { + type: 'boolean', + name: 'Auto Check for Updates', + description: 'On launch, EmabssyOS will automatically check for updates of itself and your installed services. Updating still requires user approval and action. No updates will ever be performed automatically.', + default: true, + }, + ssh: { + type: 'string', + name: 'SSH Key', + description: 'Add SSH keys to your Embassy to gain root access from the command line.', + nullable: false, + // @TODO regex for SSH Key + // pattern: '', + patternDescription: 'Must be a valid SSH key', + masked: false, + copyable: false, + }, + registry: { + type: 'string', + name: 'Marketplace URL', + description: 'The URL of the service marketplace. By default, your Embassy connects to the official Start9 Embassy Marketplace.', + nullable: true, + // @TODO regex for URL + // pattern: '', + patternDescription: 'Must be a valid URL', + changeWarning: 'Downloading services from an alternative marketplace can result in malicious or harmful code being installed on your device.', + default: 'https://registry.start9.com', + masked: false, + copyable: false, + }, + // password: { + // type: 'string', + // name: 'Change Password', + // description: 'The master password for your Embassy. Must contain at least 128 bits of entropy.', + // nullable: false, + // // @TODO figure out how to confirm min entropy + // // pattern: '^(?=.*[0-9])(?=.*[a-z])(?=.*[A-Z])(?=.*[*.!@#$%^&*\]).{12,32}$', + // patternDescription: 'Password too simple. Password must contain at least 128 bits of entroy.', + // changeWarning: 'Changing your password will have no affect on old backups. In order to restore old backups, you must provide the password that was used to create them.', + // masked: true, + // copyable: true, + // }, } diff --git a/ui/src/app/services/split-pane.service.ts b/ui/src/app/services/split-pane.service.ts index bdc317c3f..0a7082c44 100644 --- a/ui/src/app/services/split-pane.service.ts +++ b/ui/src/app/services/split-pane.service.ts @@ -5,6 +5,5 @@ import { Injectable } from '@angular/core' providedIn: 'root', }) export class SplitPaneTracker { - $menuFixedOpenOnLeft$: BehaviorSubject = new BehaviorSubject(false) - constructor () { } + menuFixedOpenOnLeft$: BehaviorSubject = new BehaviorSubject(false) } \ No newline at end of file diff --git a/ui/src/app/services/startup-alerts.notifier.ts b/ui/src/app/services/startup-alerts.notifier.ts index e561910a4..3770dd767 100644 --- a/ui/src/app/services/startup-alerts.notifier.ts +++ b/ui/src/app/services/startup-alerts.notifier.ts @@ -3,15 +3,14 @@ import { AlertController, IonicSafeString, ModalController, NavController } from import { wizardModal } from '../components/install-wizard/install-wizard.component' import { WizardBaker } from '../components/install-wizard/prebaked-wizards' import { OSWelcomePage } from '../modals/os-welcome/os-welcome.page' -import { S9Server } from '../models/server-model' import { displayEmver } from '../pipes/emver.pipe' -import { V1Status } from './api/api-types' -import { ApiService, ReqRes } from './api/api.service' +import { ApiService } from './api/api.service' +import { RR } from './api/api-types' import { ConfigService } from './config.service' import { Emver } from './emver.service' import { OsUpdateService } from './os-update.service' -@Injectable({ providedIn: 'root' }) +@Injectable({providedIn: 'root' }) export class StartupAlertsNotifier { constructor ( private readonly alertCtrl: AlertController, @@ -37,13 +36,6 @@ export class StartupAlertsNotifier { display: vl => this.displayOsUpdateCheck(vl), hasRun: this.config.skipStartupAlerts, } - const v1StatusUpdate: Check = { - name: 'v1Status', - shouldRun: s => this.shouldRunOsUpdateCheck(s), - check: () => this.v1StatusCheck(), - display: s => this.displayV1Check(s), - hasRun: this.config.skipStartupAlerts, - } const apps: Check = { name: 'apps', shouldRun: s => this.shouldRunAppsCheck(s), diff --git a/ui/src/app/services/sync.notifier.ts b/ui/src/app/services/sync.notifier.ts deleted file mode 100644 index efc9ff9c9..000000000 --- a/ui/src/app/services/sync.notifier.ts +++ /dev/null @@ -1,56 +0,0 @@ -import { Injectable } from '@angular/core' -import { ToastController, NavController } from '@ionic/angular' -import { ServerModel, S9Server } from '../models/server-model' -@Injectable({ - providedIn: 'root', -}) -export class SyncNotifier { - displayedWelcomeMessage = false - checkedForUpdates = false - - constructor ( - private readonly toastCtrl: ToastController, - private readonly navCtrl: NavController, - private readonly serverModel: ServerModel, - ) { } - - async handleSpecial (server: Readonly): Promise { - this.handleNotifications(server) - } - - private async handleNotifications (server: Readonly) { - const count = server.notifications.length - - if (!count) { return } - - let updates = { } as Partial - updates.badge = server.badge + count - updates.notifications = [] - - const toast = await this.toastCtrl.create({ - header: 'Embassy', - message: `${count} new notification${count === 1 ? '' : 's'}`, - position: 'bottom', - duration: 4000, - cssClass: 'notification-toast', - buttons: [ - { - side: 'start', - icon: 'close', - handler: () => { - return true - }, - }, - { - side: 'end', - text: 'View', - handler: () => { - this.navCtrl.navigateForward(['/notifications']) - }, - }, - ], - }) - await toast.present() - this.serverModel.update(updates) - } -} diff --git a/ui/src/app/services/sync.service.ts b/ui/src/app/services/sync.service.ts deleted file mode 100644 index af2bd051d..000000000 --- a/ui/src/app/services/sync.service.ts +++ /dev/null @@ -1,74 +0,0 @@ -import { Injectable } from '@angular/core' -import { ServerModel } from '../models/server-model' -import { ApiService } from './api/api.service' -import { tryAll, pauseFor } from '../util/misc.util' -import { AppModel } from '../models/app-model' -import { SyncNotifier } from './sync.notifier' -import { BehaviorSubject, Observable, of, from, Subject, EMPTY } from 'rxjs' -import { switchMap, concatMap, catchError, delay, tap } from 'rxjs/operators' -import { StartupAlertsNotifier } from './startup-alerts.notifier' - -@Injectable({ - providedIn: 'root', -}) -export class SyncDaemon { - private readonly syncInterval = 5000 - private readonly $sync$ = new BehaviorSubject(false) - - constructor ( - private readonly apiService: ApiService, - private readonly serverModel: ServerModel, - private readonly appModel: AppModel, - private readonly syncNotifier: SyncNotifier, - private readonly startupAlertsNotifier: StartupAlertsNotifier, - ) { - this.$sync$.pipe( - switchMap(go => go - ? this.sync().pipe(delay(this.syncInterval), tap(() => this.$sync$.next(true))) - : EMPTY, - ), - ).subscribe() - } - - start () { this.$sync$.next(true) } - stop () { this.$sync$.next(false) } - sync (): Observable { - return from(this.getServerAndApps()).pipe( - concatMap(() => this.syncNotifier.handleSpecial(this.serverModel.peek())), - concatMap(() => this.startupAlertsNotifier.runChecks(this.serverModel.peek())), - catchError(e => of(console.error(`Exception in sync service`, e))), - ) - } - - private async getServerAndApps (): Promise { - const now = new Date() - const [serverRes, appsRes] = await tryAll([ - this.apiService.getServer(), - pauseFor(250).then(() => this.apiService.getInstalledApps()), - ]) - - switch (serverRes.result) { - case 'resolve': { - this.serverModel.update(serverRes.value, now) - break - } - case 'reject': { - console.error(`get server request rejected with`, serverRes.value) - this.serverModel.markUnreachable() - break - } - } - - switch (appsRes.result) { - case 'resolve': { - this.appModel.syncCache(appsRes.value, now) - break - } - case 'reject': { - console.error(`get apps request rejected with`, appsRes.value) - this.appModel.markAppsUnreachable() - break - } - } - } -} \ No newline at end of file diff --git a/ui/src/app/services/tracking-modal-controller.service.ts b/ui/src/app/services/tracking-modal-controller.service.ts index 51feab9c5..28a5aab06 100644 --- a/ui/src/app/services/tracking-modal-controller.service.ts +++ b/ui/src/app/services/tracking-modal-controller.service.ts @@ -4,7 +4,7 @@ import { ModalController } from '@ionic/angular' import { ModalOptions } from '@ionic/core' import { APP_CONFIG_COMPONENT_MAPPING } from '../modals/app-config-injectable/modal-injectable-token' import { AppConfigComponentMapping } from '../modals/app-config-injectable/modal-injectable-type' -import { ValueSpec } from '../app-config/config-types' +import { ValueSpec } from '../pkg-config/config-types' @Injectable({ providedIn: 'root', @@ -43,7 +43,6 @@ export class TrackingModalController { ) } - dismiss (val?: any): Promise { return this.modalCtrl.dismiss(val) } diff --git a/ui/src/app/util/cleanup.ts b/ui/src/app/util/cleanup.ts deleted file mode 100644 index 254b7a82d..000000000 --- a/ui/src/app/util/cleanup.ts +++ /dev/null @@ -1,15 +0,0 @@ -import { Injectable, OnDestroy } from '@angular/core' -import { Subscription } from 'rxjs' - -@Injectable() -export abstract class Cleanup implements OnDestroy { - private toCleanup: Subscription[] = [] - - ngOnDestroy () { - this.toCleanup.forEach(s => s.unsubscribe()) - } - - cleanup (...s: Subscription[]) { - this.toCleanup.push(...s) - } -} diff --git a/ui/src/app/util/metrics.util.ts b/ui/src/app/util/metrics.util.ts deleted file mode 100644 index d93023428..000000000 --- a/ui/src/app/util/metrics.util.ts +++ /dev/null @@ -1,192 +0,0 @@ -import * as Ajv from 'ajv' -import { JsonPointer } from 'jsonpointerx' - -const ajv = new Ajv({ jsonPointers: true, allErrors: true, nullable: true }) -const ajvWithDefaults = new Ajv({ jsonPointers: true, allErrors: true, useDefaults: true, nullable: true, removeAdditional: 'failing' }) -const schemaV1 = { - 'type': 'object', - 'properties': { - 'name': { 'type': 'string' }, - 'value': { 'type': 'string' }, - 'description': { 'type': 'string', 'nullable': true, 'default': null }, - 'copyable': { 'type': 'boolean', 'default': false }, - 'qr': { 'type': 'boolean', 'default': false }, - }, - 'required': ['name', 'value', 'copyable', 'qr'], - 'additionalProperties': false, -} -const schemaV1Compiled = ajv.compile(schemaV1) -const schemaV1CompiledWithDefaults = ajvWithDefaults.compile(schemaV1) -const schemaV2 = { - 'anyOf': [ - { - 'type': 'object', - 'properties': { - 'type': { 'type': 'string', 'const': 'string' }, - 'value': { 'type': 'string' }, - 'description': { 'type': 'string', 'nullable': true, 'default': null }, - 'copyable': { 'type': 'boolean', 'default': false }, - 'qr': { 'type': 'boolean', 'default': false }, - 'masked': { 'type': 'boolean', 'default': false }, - }, - 'required': ['type', 'value', 'description', 'copyable', 'qr', 'masked'], - 'additionalProperties': false, - }, - { - 'type': 'object', - 'properties': { - 'type': { 'type': 'string', 'const': 'object' }, - 'value': { - 'type': 'object', - 'patternProperties': { - '^.*$': { - '$ref': '#', - }, - }, - }, - 'description': { 'type': 'string', 'nullable': true, 'default': null }, - - }, - 'required': ['type', 'value', 'description'], - 'additionalProperties': false, - }, - ], -} -const schemaV2Compiled = ajv.compile(schemaV2) -const schemaV2CompiledWithDefaults = ajvWithDefaults.compile(schemaV2) - -export function parseMetricsPermissive (metrics: any, errorCallback: (err: Error) => any = console.warn): AppMetrics { - if (typeof metrics !== 'object' || metrics === null) { - errorCallback(new TypeError(`${metrics} is not an object`)) - return { } - } - if (typeof metrics.version !== 'number' || !metrics.data) { - return Object.entries(metrics) - .filter(([_, value]) => { - if (typeof value === 'string') { - return true - } else { - errorCallback(new TypeError(`${value} is not a string`)) - return false - } - }) - .map(([name, value]) => ({ - name, - value: { - value: String(value), - description: null, - copyable: false, - qr: false, - masked: false, - }, - })) - .reduce((acc, { name, value }) => { - acc[name] = value - return acc - }, { }) - } - const typedMetrics = metrics as AppMetricsVersioned - switch (typedMetrics.version) { - case 1: - return parseMetricsV1Permissive(typedMetrics.data, errorCallback) - case 2: - return parseMetricsV2Permissive(typedMetrics.data, errorCallback) - default: - errorCallback(new Error(`unknown metrics version ${metrics.version}, attempting to parse as v2`)) - return parseMetricsV2Permissive(typedMetrics.data, errorCallback) - } -} - -function parseMetricsV1Permissive (metrics: AppMetricsV1, errorCallback: (err: Error) => any): AppMetrics { - return metrics.reduce((prev: AppMetricsV2, cur: AppMetricV1, idx: number) => { - schemaV1Compiled(cur) - if (schemaV1Compiled.errors) { - for (let err of schemaV1Compiled.errors) { - errorCallback(new Error(`/data/${idx}${err.dataPath}: ${err.message}`)) - if (err.dataPath) { - JsonPointer.set(cur, err.dataPath, undefined) - } - } - if (!schemaV1CompiledWithDefaults(cur)) { - for (let err of schemaV1CompiledWithDefaults.errors) { - errorCallback(new Error(`/data/${idx}${err.dataPath}: ${err.message}`)) - } - return prev - } - } - prev[cur.name] = { - type: 'string', - value: cur.value, - description: cur.description, - copyable: cur.copyable, - qr: cur.qr, - masked: false, - } - return prev - }, { }) -} - -function parseMetricsV2Permissive (metrics: AppMetricsV2, errorCallback: (err: Error) => any): AppMetrics { - return Object.entries(metrics).reduce((prev, [name, value], idx) => { - schemaV2Compiled(value) - if (schemaV2Compiled.errors) { - for (let err of schemaV2Compiled.errors) { - errorCallback(new Error(`/data/${idx}${err.dataPath}: ${err.message}`)) - if (err.dataPath) { - JsonPointer.set(value, err.dataPath, undefined) - } - } - if (!schemaV2CompiledWithDefaults(value)) { - for (let err of schemaV2CompiledWithDefaults.errors) { - errorCallback(new Error(`/data/${idx}${err.dataPath}: ${err.message}`)) - } - return prev - } - } - prev[name] = value - return prev - }, { }) -} - -export type AppMetrics = AppMetricsV2 // chnage this type when updating versions - -export type AppMetricsVersioned = { - version: T, - data: AppMetricsVersionedData -} - -export type AppMetricsVersionedData = T extends 1 ? AppMetricsV1 : - T extends 2 ? AppMetricsV2 : - never - -interface AppMetricV1 { - name: string - value: string - description: string | null - copyable: boolean - qr: boolean -} - -type AppMetricsV1 = AppMetricV1[] - -interface AppMetricsV2 { - [name: string]: AppMetricString | AppMetricObject -} - -interface AppMetricBase { - type: 'string' | 'object' - description: string | null -} - -interface AppMetricString extends AppMetricBase { - type: 'string' - value: string - copyable: boolean - qr: boolean - masked: boolean -} - -interface AppMetricObject extends AppMetricBase { - type: 'object' - value: AppMetricsV2 -} \ No newline at end of file diff --git a/ui/src/app/util/misc.util.ts b/ui/src/app/util/misc.util.ts index 25f291bea..b94a2a1a2 100644 --- a/ui/src/app/util/misc.util.ts +++ b/ui/src/app/util/misc.util.ts @@ -160,4 +160,10 @@ export function capitalizeFirstLetter (string: string): string { return string.charAt(0).toUpperCase() + string.slice(1) } -export const exists = t => !!t +export const exists = (t: any) => { + return t !== undefined +} + +export type DeepPartial = { + [k in keyof T]?: DeepPartial +} \ No newline at end of file diff --git a/ui/src/app/util/properties.util.ts b/ui/src/app/util/properties.util.ts new file mode 100644 index 000000000..4da425c71 --- /dev/null +++ b/ui/src/app/util/properties.util.ts @@ -0,0 +1,137 @@ +import * as Ajv from 'ajv' +import { JsonPointer } from 'jsonpointerx' + +const ajv = new Ajv({ jsonPointers: true, allErrors: true, nullable: true }) +const ajvWithDefaults = new Ajv({ jsonPointers: true, allErrors: true, useDefaults: true, nullable: true, removeAdditional: 'failing' }) +const schemaV2 = { + 'anyOf': [ + { + 'type': 'object', + 'properties': { + 'type': { 'type': 'string', 'const': 'string' }, + 'value': { 'type': 'string' }, + 'description': { 'type': 'string', 'nullable': true, 'default': null }, + 'copyable': { 'type': 'boolean', 'default': false }, + 'qr': { 'type': 'boolean', 'default': false }, + 'masked': { 'type': 'boolean', 'default': false }, + }, + 'required': ['type', 'value', 'description', 'copyable', 'qr', 'masked'], + 'additionalProperties': false, + }, + { + 'type': 'object', + 'properties': { + 'type': { 'type': 'string', 'const': 'object' }, + 'value': { + 'type': 'object', + 'patternProperties': { + '^.*$': { + '$ref': '#', + }, + }, + }, + 'description': { 'type': 'string', 'nullable': true, 'default': null }, + + }, + 'required': ['type', 'value', 'description'], + 'additionalProperties': false, + }, + ], +} +const schemaV2Compiled = ajv.compile(schemaV2) +const schemaV2CompiledWithDefaults = ajvWithDefaults.compile(schemaV2) + +export function parsePropertiesPermissive (properties: any, errorCallback: (err: Error) => any = console.warn): PackageProperties { + if (typeof properties !== 'object' || properties === null) { + errorCallback(new TypeError(`${properties} is not an object`)) + return { } + } + // @TODO still need this conditional? + if (typeof properties.version !== 'number' || !properties.data) { + return Object.entries(properties) + .filter(([_, value]) => { + if (typeof value === 'string') { + return true + } else { + errorCallback(new TypeError(`${value} is not a string`)) + return false + } + }) + .map(([name, value]) => ({ + name, + value: { + value: String(value), + description: null, + copyable: false, + qr: false, + masked: false, + }, + })) + .reduce((acc, { name, value }) => { + acc[name] = value + return acc + }, { }) + } + switch (properties.version) { + case 2: + return parsePropertiesV2Permissive(properties.data, errorCallback) + default: + errorCallback(new Error(`unknown properties version ${properties.version}, attempting to parse as v2`)) + return parsePropertiesV2Permissive(properties.data, errorCallback) + } +} + +function parsePropertiesV2Permissive (properties: PackagePropertiesV2, errorCallback: (err: Error) => any): PackageProperties { + return Object.entries(properties).reduce((prev, [name, value], idx) => { + schemaV2Compiled(value) + if (schemaV2Compiled.errors) { + for (let err of schemaV2Compiled.errors) { + errorCallback(new Error(`/data/${idx}${err.dataPath}: ${err.message}`)) + if (err.dataPath) { + JsonPointer.set(value, err.dataPath, undefined) + } + } + if (!schemaV2CompiledWithDefaults(value)) { + for (let err of schemaV2CompiledWithDefaults.errors) { + errorCallback(new Error(`/data/${idx}${err.dataPath}: ${err.message}`)) + } + return prev + } + } + prev[name] = value + return prev + }, { }) +} + +export type PackageProperties = PackagePropertiesV2 // change this type when updating versions + +export type PackagePropertiesVersioned = { + version: T, + data: PackagePropertiesVersionedData +} + +export type PackagePropertiesVersionedData = + T extends 2 ? PackagePropertiesV2 : + never + +interface PackagePropertiesV2 { + [name: string]: PackagePropertyString | PackagePropertyObject +} + +interface PackagePropertyBase { + type: 'string' | 'object' + description: string | null +} + +interface PackagePropertyString extends PackagePropertyBase { + type: 'string' + value: string + copyable: boolean + qr: boolean + masked: boolean +} + +interface PackagePropertyObject extends PackagePropertyBase { + type: 'object' + value: PackagePropertiesV2 +} \ No newline at end of file diff --git a/ui/src/app/util/property-subject.util.ts b/ui/src/app/util/property-subject.util.ts deleted file mode 100644 index 51f8431b4..000000000 --- a/ui/src/app/util/property-subject.util.ts +++ /dev/null @@ -1,49 +0,0 @@ -import { BehaviorSubject, Observable, combineLatest, of } from 'rxjs' -import { map } from 'rxjs/operators' - -export type PropertySubjectId = { - id: string - subject: PropertySubject -} - -export type PropertySubject = { - [k in keyof T]: BehaviorSubject -} - -// better type information than Object.entries without the return type cast -export function asLabelledList (p : PropertySubject): [string, BehaviorSubject][] { - return Object.entries(p) -} - -export function peekProperties (ps: PropertySubject) : T { - return asLabelledList(ps).reduce( (acc, [key, value]) => { - acc[key] = value.getValue() - return acc - }, { } as T) -} - -export function initPropertySubject (t: T): PropertySubject { - return Object.entries(t).reduce( (acc, [k, v]) => { - acc[k] = new BehaviorSubject(v) - return acc - }, { } as PropertySubject ) -} - -export function withKey (k: string, v: BehaviorSubject): Observable<[string, V]> { - return combineLatest([of(k), v]) -} - -export function toObservable (t: PropertySubject): Observable { - return combineLatest( - asLabelledList(t as any).map(([k, p]) => withKey(k, p)), - ).pipe(map( kvPairs => { - return kvPairs.reduce( (acc, [k, v]) => { - acc[k] = v - return acc - }, { }) as T - })) -} - -export function complete (t: PropertySubject): void { - asLabelledList(t as any).forEach(p => p[1].complete() ) -} diff --git a/ui/src/app/util/status-rendering.ts b/ui/src/app/util/status-rendering.ts deleted file mode 100644 index 28ee06074..000000000 --- a/ui/src/app/util/status-rendering.ts +++ /dev/null @@ -1,31 +0,0 @@ -import { AppStatus } from 'src/app/models/app-model' -import { ServerStatus } from 'src/app/models/server-model' - -export const ServerStatusRendering: { - [k in ServerStatus]: { display: string; color: string; showDots: boolean; } -} = { - [ServerStatus.UNKNOWN]: { display: 'Connecting', color: 'dark', showDots: true }, - [ServerStatus.UNREACHABLE]: { display: 'Unreachable', color: 'danger', showDots: false }, - [ServerStatus.NEEDS_CONFIG]: { display: 'Needs Config', color: 'warning', showDots: false }, - [ServerStatus.RUNNING]: { display: 'Connected', color: 'success', showDots: false }, - [ServerStatus.UPDATING]: { display: 'Updating', color: 'primary', showDots: true }, -} - -export const AppStatusRendering: { - [k in AppStatus]: { display: string; color: string; showDots: boolean; style?: string; } -} = { - [AppStatus.UNKNOWN]: { display: 'Connecting', color: 'dark', showDots: true }, - [AppStatus.REMOVING]: { display: 'Removing', color: 'dark', showDots: true }, - [AppStatus.CRASHED]: { display: 'Crashed', color: 'danger', showDots: false }, - [AppStatus.NEEDS_CONFIG]: { display: 'Needs Config', color: 'warning', showDots: false }, - [AppStatus.RUNNING]: { display: 'Running', color: 'success', showDots: false }, - [AppStatus.UNREACHABLE]: { display: 'Unreachable', color: 'danger', showDots: false }, - [AppStatus.STOPPED]: { display: 'Not Running', color: 'medium', showDots: false }, - [AppStatus.CREATING_BACKUP]: { display: 'Backing Up', color: 'dark', showDots: true }, - [AppStatus.RESTORING_BACKUP]: { display: 'Restoring', color: 'dark', showDots: true }, - [AppStatus.INSTALLING]: { display: 'Installing', color: 'primary', showDots: true }, - [AppStatus.DEAD]: { display: 'Dead', color: 'danger', showDots: false }, - [AppStatus.BROKEN_DEPENDENCIES]: { display: 'Dependency Issue', color: 'warning', showDots: false }, - [AppStatus.STOPPING]: { display: 'Stopping', color: 'dark', showDots: true }, - [AppStatus.RESTARTING]: { display: 'Restarting', color: 'dark', showDots: true }, -} diff --git a/ui/src/app/util/types.util.ts b/ui/src/app/util/types.util.ts deleted file mode 100644 index 745ec5f6e..000000000 --- a/ui/src/app/util/types.util.ts +++ /dev/null @@ -1 +0,0 @@ -export type Replace = Omit & { [k in withKey]: T[key] } diff --git a/ui/src/app/util/web.util.ts b/ui/src/app/util/web.util.ts index c98d72a69..484c443e9 100644 --- a/ui/src/app/util/web.util.ts +++ b/ui/src/app/util/web.util.ts @@ -1,5 +1,3 @@ -import { HttpErrorResponse } from '@angular/common/http' - export async function copyToClipboard (str: string): Promise { if (window.isSecureContext) { return navigator.clipboard.writeText(str) @@ -22,11 +20,3 @@ export async function copyToClipboard (str: string): Promise { return copy } } - -export function isUnauthorized (e: HttpErrorResponse): boolean { - return !!e.status && 401 === e.status -} - -export function isBadRequest (e: HttpErrorResponse): boolean { - return !!e.status && 400 === e.status -} diff --git a/ui/src/assets/icon/eject-outline.svg b/ui/src/assets/icon/eject-outline.svg deleted file mode 100644 index 6ecd2a10b..000000000 --- a/ui/src/assets/icon/eject-outline.svg +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/ui/src/assets/icon/eject.svg b/ui/src/assets/icon/eject.svg deleted file mode 100644 index 3e2a87bc1..000000000 --- a/ui/src/assets/icon/eject.svg +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/ui/src/assets/img/logo.png b/ui/src/assets/img/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..1ae99f9d2b5d6e7b54fb121a20133fd9f318f95a GIT binary patch literal 8149 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�m>o$l)w+r{@2f7`kg^mhv?cKyqVe>!kE8~i ztCvoX!yao(eR|e*C%~_@({5>kG_^R)K``7?^BBoTqrnIaEyw;;>`q=edSVwP_rNkF z1>i(|UeP^K4Wt)^RP55D2{g!QHP|wZ3{IO9FyhzV1bNkCb)bc9FU2~nawQ2}FG025qxd$^< zXVN(S-aOVr#=o>;pZ_$bYJ^Vn|!FL%NyM`s4eWM66$i)-KKb&AF& z`LR{PBD9dZ2e-006P!90qR|~aJ@qm@$%8>36hF*qVe5F zD&6P0@KEi@$PTW|L-Fgjd=F($SWy%a&+wNqyAdbT{q_9Ur_pEl-0czX_P~* z=U9f!&O~roUX|QGvllr}5t6&eedN4ImyP_aL>~1b@!)Xx2qN#;LR)~yU2X!`S;yh) zTksuNaSB_p@I)Tu@_WOI)hZIDuqUi}0<;ssC%)V~%d%Q=ekZ59eYNbz!v}GpwRJ+U z>cE59xIm-$cHw~9*-+;CjTzh^M+FN2Fd+)|-&u=AR7!D?0-~D9qlsr5vl~|j{o-%6 zC9OR|gy;Z(dO9+fB1KvNk7z8S^^c-R%FZ=F-n~xSruqzF6#nBwn*S%SqYtL9Na?a- VHVtC6|6Sk%G*op|DjwNJ{~xWwA4mWI literal 0 HcmV?d00001 diff --git a/ui/src/assets/img/service-icons/bitcoin-proxy.png b/ui/src/assets/img/service-icons/bitcoin-proxy.png new file mode 100644 index 0000000000000000000000000000000000000000..f0c84b3bc11e4e61604b8ada66f076779ae5fad7 GIT binary patch literal 48593 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ⅅW{tG&P0*oh{7G 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 diff --git a/ui/src/assets/img/service-icons/btc-rpc-proxy.png b/ui/src/assets/img/service-icons/btc-rpc-proxy.png deleted file mode 100644 index 78e57d65e11087fb63419cdb8ae4ef4bf902fa9f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 58548 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 diff --git a/ui/src/assets/img/service-icons/c-lightning.png b/ui/src/assets/img/service-icons/c-lightning.png deleted file mode 100644 index 9b53c1a5cc120f02ca5577ca002f1ad6a462b71d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 52891 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%0AF<_^d!&f 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�ojJdgW$eVuhSFN|%7Osy|GWT4w(q)?^{CyO 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

KgEUgy+4 z=H04s_}kLJO_co0dv4q1kERm&nB%~?^-h++lY^%B!qpv<1TVng$jHCJp6~Tj^ViZ9 z^Ukx`mHfF&&h#ulcIBG0&j%#1(1-kZKev0!F~CmJBS%g^Q_0%THU{9~^alPj*+Sk= z&YPrL7Oj72NF*?TUh`@Tu-Rb*`HQHx>$Fu!A;3@4Pvwgx7M5$5T8gWd$tzteSk^al zS2NYa(Yl_t8XyCAUG#9vg~>R9m9&cu$N)y?w7X%Mk$Sve5@p!5ZvBjL@oO~tn+6U7^U-Si z_HBnl#7F?6;$x;}AYFepFo38(1DBo^B@{!JKS7k4~`}o=<}2>kp5rd2K;3l^P9Ei!pYFmv2YhBFIl6l;gb< z;P&KHaaE}+$)W*CDRh)c11#%F*z-jmnsQnHp69pO|B0{szSGyI6!jK;V*aI5lJn;} zfj5*h!(}eZ-vaVu)R%lc*ge?7OzZmOa`A{|*Ej1WV^0)U20s>QH4`YIRSo1GeSwoayv zhHZ^Ft2b^>F`WAvdBpp9yzXx#{*A886Oo<>d+4BjsfS?UBJWR#`SFU=;*Qg&TY*wa zcTpBOx(3LiXt;Oi(Y0cEiF*JyXW)Y#{VjQj6VdmHg*=3``QacHwUjDuuoo#(|K?;4 zPp5&E)au309w}t6zf*dSeGQsp5C3(3qH&^cXcNya7yhXKENs;R+lP21t<;eo`C42B=}h z@xO(5BadZO>f6)}i;y`L3pJI88^vJHI?T?tj@fyYn?-3GgSn9x!e&*CHbo`Ofq8Pn`#aB~ue-a51HfYZm)y z7}r-WW0zF(+C|N(HVlD?Yqu+wBHzIoGS$(69^{`&8wPcob|E||#}Jb+|V0(oO)UE%i%F0R#5Y4*#w5?UHHNw`Fm3%O%_=aak zr_`z6wZ^6xqAc&?>p1#4e|^tsSd;}acw^!)a3C1Ux4V9-r#43%Hf`>pm^^jb_jd(Oaa626bqQRL^@tR+ zF!d(2I+>&0W5(CI?WzKmf^UbTQ7TO%e$}w^>NV=AM!5z!ko{FBS zXn!QkH=vj?jwzB1YO`{2@=PB8SG4foty^KOmVsrhNMQ8CLYkEt=>r*&POtzl0<>80 z!lOpiEm?C$1sJR$ZlS7C$~=-YnIF7DZt7y@2rf}N$TzhZ2e+wYahS{ z0R+~69z&#q8&U4K-{3DrqZ^cL$1rl2NnJh(g4cUe1v{})0*RP3JI@vjPrCSC*2PFH zQx%?GSQC)Z*{3R|5orzJ+m_yhUn6zE%;id5iNAWfj)kHvrc#C&bEN3ivA@;cV8skj zuRHrdry?J5hHX2wpxaMmET>}^WP>fjc84V(o0^ampi3xW%@@~WEr1E0qH^$%=S2K{ zn_m484z`@s9wR{qNJKRFlPP@uy#4H-R_Ju^`Q+t;?m`|^7xw*Q11R%Y^*aV;aQw?h zh2KeV9|wqia4KI)d|HqliQt{6c#9d?9``v1@_qSzt8Ly(fGaB zOOL&dc9(%c8kyF5J0qDI>S7re0_&Mg;ru;o$tP*0`gJ1m*|_s!y9{~tm;ftV;hXn^ zx|m!e@iABu$)A6VzsQVefivC&JZU1UaYZ0F8Z4JR%8jO9uFRAU3)mT zBiNK6Jf8@D(*FF)M+^|u68M+syQut^Za2itYLj%#cV%*qm-%Y;zv&%Z;(i%+e~>fW z^L#qi`46w52WK_R|EY~iTKA)~u3W3}9Enm?TLw9Mv zbQ>|axMy*5uJ);rc#Ibj5NJi2bEE=LOW0VqNZWd7<2Fq1S-RJO)y zmkkwfmi>8t*~R21@av1L#Q6LUc?m+sujl5aerix($yr}(vyZjML2%u8 zg|9$Q@SLS1xukG4h)h%tk1Bp-#r*cCaWD3=R=RXqXHT_G30!Oby+VW1%{LqN0dGIu zmC2QmD)hj^O?0FzrYDqc6R(w8Fydj+Ju_6q}@d|gj+5Q4V2uQ;S*}S(KFS7KI}5L)=R|42L;bK zL-{=P!zWYkHE~txauRuSMp6WmC6A2KVueKZR>?Ch1BqOz&4{ozMoiD6BDW-H@8|03 z7UxCx75C%Idbcw&h4D|7W`zVg2WeMIUku;rH_MtETvkV)6Cvp~D8fv-L=!S_>5?42i_k~sqB)Llmbq_&T0F=452QTn$za%*5aii zUwnC{&CO!WL_G6N>-lJ8+UPE+*+A?$K6kv{FLD3sEO#y`CHNb|B-bswI0wpSuSElS zGZ|pGum*Mg2XrGu^3j{$0^U|=Ya_0m?xj#Gv1EQ+YZQ8r4GHVl zpOGZHD09pG6Q_)}4LwfmVsm%CSnx9vfr!$|#`|&H@q`nm84u0nxMR=WeA98GcZ%t| zRoa|s@>ijq6G0YB7^|Y@)$0`dTf26TweY_M#5$#+H!5j~B`L*l*+H~fCF+(0`evD+ zc0F$UU2!og74e4{#y7>ano#Xewwxp09GoUlRnk+|G_;6#vd2tcwFNavA5U&`X(rwi zMT%c*Q#QGwV|PiTzuC9ZXQM?u|Cn{{lV9ig2?;fI;e%i%9lV2=`Y%a$?S|SOwQ;>+ zUMh4hBLZPOD;e;))NvcL8p;O1#ns{VzR4J*;dLO#TZ2yPs0l5IoUR+6 z_Y(&Pz$kQ+utRDXPhyVi3BjEJuSZDChb^#sUBM|A+*4cz0<%Y25L@Z>j?}jJ6woOh zoj)q%Nq`XXXsr@Ee3~aC<^M}ecy*u*A4|>J+Mu%)nTxEsOouS17*G1wyXZ(~GlrFF z-sWy|cXEucj~Q(GhwF`XV#1~G7}C~K-e%z0h}?j;eia8-H<%ruj+m zpXzVGmdMN$YG2bo*}BvsvzN{$vl*(xg(u?Cl+Ow@P< z55 zb;UlVGsmHE%Ck=447K@@$L=7h+gTnZAIj`?UvRF2LKIxOg1=0&*4rsJXJz+gk|iwG zpwr!14q@}itPxAsLOBYRJq7oc+b*9s@xsd45ft%vc7p}3=sR)RX=rkmhC8jV>=Ns@ zWHGNQ7H!xs;^brcrzD*EQlI!^R3|b(MUUP7PL8dYZLle?41QwdzR*fNHSEEB>cB;0 znt&Tghrd!AZdKNt1UJqjr6rDXm6|?Brs{{AC_RA{84nPB)<*p+P&Kc{pot<0`~&f@ zh8L@BCs@OWdSUp&HDsK8HO7_`Po{FcB zO2TZs7XwBBDe#qmV*;_aMVap>i#<<|sfa+u-zqcjjaLX;eJvHTv~?LzKAti4KVSQ! z&$@{k_jcdJn>a^bfGf%2ys&maCp|PrFGi{?WZ@UmOpURr3W4lta^U1vg@bj979YAr z*<~|^XE&7`eZBM9dihW}yc8MqVZ<|5pFO9xUxuNTEp|JD05t1t-HliND=pId@z+Zd z6Gr_UShUQTzVx={;Mn1{*QYH_GS55k-_CO(F0#&LR5H?&$PXRNIHS|(y#N``{MLW# z&L~I-tp88L{6|x1+xA9>j8Bb2J~hZ7R0e9&b~83(*?*iHTyuB$# zwmPyr=j*hEF_G%;0oP}V@FzbK;2c(>>$kR4KKJy$%R=P6>!)we|MeXCPC^RtgBDAn zOLguO@`G}}d{lxn+hYSRWUXVi~RUk?JzPW6q=ZX%u( zd-lI(wy%o(2&_!shO=Zn?Zbiz@kx6pYR4XzyGZW{-X4M`ULeL+UWVX)oHG))rziLiclIb+jSta-oMR)b6&E*mg;K&A z5*oK#PbBejv&o#^9PU#gd(yX;L_S589}nWJ+el=B%v=ETB{2#nh(3Q$N|eP|CI_o8 zIA9tyeeN%G#7ojgnE2!}eRo0#Hb1Fbhf?=8m{-rI&6Gx0?OZJmzr0vV@KP=@~7XyK39{kQefagk{L<43Dpq+*J%BIY`gb@+Ne7t#S$UUoQSfkSr>arZw#>$Kz z>Sp+^hYd3FC3Y)ve5%IRz|5`2I@F=p?SDW|-rwzL?o2=5W>p-sP7#bIW*V-1YyM>M zX!=UEu;(SuuPKsqC*y6OHF}+>-69+I3mL#Uh*);Ryh>S{UA5c%-6{Aq9mnCU942Ez z=GWt`33D4ANwN(~sgHt6!M<{BtC;k9)wB*)2%sw-uv&rQE*JT}^MW#kMLFnp=H@Sl z7l;PLF?PT!>HdVzfCx?Bjm*kjlZ{6c03U-kSX}#sVEkYQ+lW9Z3C7~$@?VaoV>J=( znW)5+)_iS~Ys(#Yt2adQ<{wVC2-i}%6%m(uJKK+vDfEBt+=BgqPASCPy$C;D zE^i~@zNcCK+r?k!-l^3ubvm~7DJB*=XGI$}e@#eDec;A`1GmE{B8~yEhfRu(CwVll zgKJ>_`8&QK-UV3LI;hwot^UQ7&;I+rm;fClzsIScG7)*CKJ_UnlTeC%m~nI2u87hR z6dSR5I|U|3Ube9;yz7loO0#FiaBk-GHv$8Sut2TL%-YIl+W_h-(S zL-Y%WyU?M|?~STq8U0<{%lr_;vioQ`lypu~!--EdO)9aHXZ61@Hy3k1<9dNO+jH9A z=LQ(g=&-kOlTqt4l@U5I6XZ}0J9`VGRrR~yD5I5<5#FnaGCgq-3J%==G?U%DgE$TI zZ+25c!Goytl9mK${+^K1%$0NvM0X1dICWGde2sXk?EV`am(pDovFoI&RO%J0eYoNJ z&zwW@=3TX*A;LP{>C&F33 zXC4w$Tvc)Otx6XnM&PPA_j&S1*jLq0?{!zh?t>!a`%XY?z zn{b57P{SJ;VCG={+MqLX_xMRZF79uIk8ugZABIy&D~l=>oCJte<8D!7de}I1f#2Lr z=}20oqn=ZW_4-%O6?uti^eU!O&`S*f7Z6k?*BU;qIX{Hysn;eNwZj+0%`)@uT_8OTpuz&c~4 zBfNLzyR;NGdv_d<-_+4^Eq$}zfj^yp?AN}zmN_+;HUCN1h85?LX?V?w_yf50(Cf{e zUdw8JLh#bIne1N+KE<}bi)x(a$Pd9%5}>U?iZyD%TAXiG(C6*)V~Cdy_`+YS@cWjR zIo<|?j>{6zN`IHO-1|=wlx-4`>imj4r@jcGT!;OBsq(cFR!7pHAG`;{9goa{ZiYkv zHE%||EK1({)750No1NNkQ~lc^Z1t`vqk1h~%``1=zhuVeprp)Ah8WcFAb4v^1M|lz zr2k+N0=o*>*CJ*fOM{es{ATPTbsPN7%JbWZ`&6=BX(&>pVSjPR0^wnUwY;=x*j1p9T`?EiVldmucI#@OJWN2(4{$KZRGsWyNK%Yk!#25I~p zH&)z;+VUiqBJ363^Exe2ogQ2E7ctXdPtEU2%XLp$kbRDUJ>ABopFfz_Wn7{G-n2h) zm5?|dvJeesfore9X-TB7t+R+Fxxqhu+DKE zN*=_md#J_Ey;*Y>xtwfAoh!parpknAd;?&7$A!CTe~VH|s8=QO#A@WbK001NOqy%| zlGf4rfk6CbZ`q7l3m)Ogq{B8 zM>!FUs1&QMPk$8wGF|p4$s(5@cD5h%E1C4onU%y}wdPKF&&hA>@h#E*yZ>3wVC zL1BH?C_XKIc5T!qBeV2U*h&Uo&vw(>ig1DI)Sq}y4(S$O0tioG%SwvqMDve-4<;)# zm8>S4+ho8b6Y!i+6>ZP{5oyVOQ`t2uvS@sQT_l1I`X2hG;)t7+r@^0E=9h+#u8j3V zUfmj5y^In~Gdos5zm{Xa;BcFkI{uG{z@~f#?|U|W)9j7hF^|Sn6_CSGw+|1d1CFxa zom9xsJYuc;xXzuHeX1xs&mLs!xIT&6nf9NhLacpy%iJ!4^`bTEW0RPnJJt3P(@GT(+ zL9;xEim3s={&31_7&~mNLJs-L5zAg39$M>2^|imb-d~u0+&J7Qe$TMm58?F`<`!Py zYL-3T)=C04&3w`=|K^Wqru}|4DuyG|XEubqrxxyl(e8gO9b<09pkChE&`WleN*kNT zn5kUNu;IjvJ9Z{SdIdY`VE1h5JkOTvTTD)Kwm3iq*FVJ$D`yYa5BXf;qh#TTbM#4t zt9zhz*xs0CrN?=N?5ht##R)@KvDKl|MV0;XDiIj_>T4PZpWOPd?OUZe!AC!bNfXYl z*X)^jLZn4ZPP|mbS(8N>4|JO?2@#X4or`3#F zN?2Cp!MZVBS8h~R!rRBcuReXr9S<7~0xRC-8i(1FZHDhydSx4UBssH+$eOaCeb%eWX@mPQ=)uIF2N2 z;LUC7!*IA%;jP2cx%b;O^#H^8e{ zSG;BrP3t2uwV-)IyN-oVwwBgz#Me!Ok#=(A0wOO?tV^fcF#C5{%A^EtePT1AF|gj5 z)9afVB_r>$6<^P^caJY$&3yeYC&=(0%O#T<@tiB6kWnQn{+-1@Ao5@}TXS3Dw)Btx z7xW1W_93~4qh=kf^B+StUKmSHBf7pZ6*?ElIJ)d7yxtZfcE9L(H+PS3_U3KcH>&jB z+_k1=-5Wn~IVR$@x1Z2HC}zZOftMuv1zhE4zNndkd2jbiE67~r=((;sT528T%9$U6 zDnEaHhkJA6QWvjixg&K8nOn=~OP+o7F5YQe1$p%3asXtxK_l zij-M!yH8@&3ZvAd!J1bGcivmKdqjAQu5ZftwW0O5SiEZSyyS!L;lWa)=T&Qc)mn#F z;^frqaeG=%9(nTUoBJD24>2?>uuiTIaeOa*mG&Ju&X0vU?bMIQYdaL!HvoV+z;PpE zu!5hPTrtX@FVc8)2*N?0Iz75i9rW(!o_K4;tRp{aF&p#JPOcA$T7QE{YNejsee;_^ zu^vdR#jI1CK9=r>y8R`Lrggtw)TtlZ=wIpcGFoFk{fX|4)JD_K*?Q{9?|IO%;J;y^ ze~80%6MZaoe|5K~b)s5@V%FK;HMw$()`|4Ap8E7lJ~{lskM}}-^7Rhgmqs14RK9ZS z#Poq6W}UtF&zeT;YwderJ$$yQKLGi1KkE4Mln{JH?H;Z)V^!l0y?H*416FB0D!(xl z;5*CRC$OH;zEQ9ASv3nj>t)?I-p;c;Ul4C1{NiFK_v^;S9Q&Zufr+QbcsfqU>AADa zemQ9LtytS#IIK9h@ii^QGE*GyLw?#`U4j{c!r;_@$iM-G6UJ_VgV1X1zSvZyPaU z&R~6sk8pn=vTlwq9{vDW?~VnqzlZMwF7Zk*WRSW(6Jt_dQ%VR~nu`M}6$e~d^^dF1&r=_$u(-AH|M&hhj7 z!Bc8H&TlbeX>+^zc)o)%i|3ECwg>vC@h*9mqX!(h6&E8>Gd?GHFkj!T{c`JbN}k=_ zQx2M$%~Hml1&)^lJk?Vp=bBvFa^zNAY`Cq_|HdVw2fKd&+6`cYx)U*W55Bpk#?(qP z4hOFuboK>5cE+lAVSyn|*ja*qGEV=*@NIo*a|Srwv%YwJer_T~B3$>@h`&~H;pCin zafP<~#C~7I+h@FXmh?^i<-ZVqgBcHO{JUmvHSPg3Z*qK;@heW9MSm_O*v)l#;lT?B#?9wa3PwE_H8^78>Zaa3#8Q82Q(HxGr zzKK_^&CWR*4$>HWwPGup1e|NQ2TVY>j9RP=1Z;d*cn(M{4>9 zK%s<;7uFAU@XVD^yX#E#OeX8$$os;orwawVJsf$h))wj6eSZqTYkfr6*2vrYmsi#+ zuY32r_~vaeAJnW@?CRS?fWr^TFD&bDuO7_X+N@`eo;^JE`6sqDHMKYWiix31Z*xW9 z$)OJCFWwtgven?HKe6_I{<{`9dO8oazs?Vi@7tmtS6P4VExFiue4QU_HTsvv=R(t? zF&KO`?A00PEQd~vd1_VYx$Q$?eKNoQ2JoEd`GR~6H%&15g?01cdE?-3^UN7C_Pwb+ z@z%iGHHUNWJnp;iZsrEp4UN)y(*yX&^K*_x zle|HlgJ1RT6{fwP4-cH$#LfG(p@H8Ip`zN33I>mD^X%sV@g-+9ml#*$1>D}xlUMX~ zsoiQ1{z?0cRP~-GZ~h1UWbove8;e!x=U+sr0w)J!p|{qB`f#sz)V&8^^Wmpg>deLU z$_U2gs{HUzOb!uV_;+s2I<#Ap`^V<<1p~7`Df^do%qLDy`)7^3>JxrhJ_>kvu=5O~ zeF*UhFF2iBvtIP0q28y>@AJR)#>4vl0E}S+fJ5kmRPO2BL+{){hSJ;NiysG&Uy=Ha zsewkGduq8F%f1Ote(UW=+?x=(t&OjGb-k}&=Y7a;{dst`ni~%?+Enx63~%ddD3H&! zcqYlc>bt!;F-t+`OM{47U0-^2{;34#O+Oy{L&9Ed`dYuS^dxtGYp0LThVAQ8FKEBo z`?oBij`Hp2UY&bz^E9B&f-fFgG)t#`V`?CgyHA}4V(#A}oLURnj|f)R*S`c@@+3~Y zE{Iq-RM>hKpO0?(2QC$D>&Mex;>7Op2M*_L2I_Asxo`ar&76VS>SmTcf8{%W)Vtm1BW5HItY&+QS_IaBH&R{eO%6_4)g{E0{Yug{Oh zS=1YujlREDVsPdC@)I9j8>ddZVwFFB)~(@hE=H_cZ^05Dep2sy{CddoIdr+99~Ue8 z$+`aqVBH&Kw2o7|)xcs~n`RXr$|UeQoqBr>rZ4gBLAG{C_G8-(roIQ9{ee|2bx^>m zc~QHUntLX+`ZtFMH&=U*lhpYteO`iz$DHzp+x)yg>0wS}rIvl_UNFxBbziFa)BM1i zP#?@r?w|P9@#dnR9BauT2On-naU+;H@$N-Uj~lHtN;K2 diff --git a/ui/src/assets/img/service-icons/cups.png b/ui/src/assets/img/service-icons/cups.png deleted file mode 100644 index 3b1f72bb05c471e1c5e16d49b0f5385a15a0bed7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 63490 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 M07*qoM6N<$f?u~7IsgCw diff --git a/ui/src/assets/img/service-icons/filebrowser.png b/ui/src/assets/img/service-icons/filebrowser.png deleted file mode 100644 index 6728fb3c628d732a060d068d5e14baa26dcfa688..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 32957 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

P5gBWnUu_SYnXot!E=fs*;7H0fJZ;2dj0 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

    @yY_cFP4z=pbCLG08a#n>H1~Gt96We) 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 z,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 G`2PSn5%xs@ diff --git a/ui/src/assets/logo.png b/ui/src/assets/logo.png deleted file mode 100644 index 5364a7dc5c6b41ff1a8236caf476d89bf25d4735..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8789 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 Q{x4qTR~iZ>a_>I>AFBMVDF6Tf diff --git a/ui/src/global.scss b/ui/src/global.scss index 6c3eada49..5b4c09a6b 100644 --- a/ui/src/global.scss +++ b/ui/src/global.scss @@ -88,13 +88,22 @@ .notification-toast { --background: var(--ion-color-light); - --button-color: var(--ion-color-primary); + --button-color: var(--ion-color-dark); --border-color: var(--ion-color-warning); --border-style: solid; --border-width: 1px; --color: white; } +.notification-toast-error { + --background: var(--ion-color-light); + --button-color: var(--ion-color-dark); + --border-color: var(--ion-color-danger); + --border-style: solid; + --border-width: 1px; + --color: white; +} + .sublist-spinner { text-align: center; margin-top: 40px; @@ -113,10 +122,6 @@ ion-title { font-weight: unset; } -ion-item { - --border-width: 0; -} - ion-textarea { margin-top: 0; padding-left: 12px; @@ -281,17 +286,8 @@ ion-avatar { --inner-border-width: 0; } -.full-page-spinner { - min-height: 80vh; - align-items: center; - color: white; - margin: 0px 30px; - display: grid; - grid-template-rows: 35% 15%; -} - -.recommendation-item { - margin: 10px; +.rec-item { + margin: 20px; border-style: solid; border-width: 1px; border-style: groove; @@ -306,4 +302,24 @@ ion-item-divider { font-size: medium; padding-left: 10px; font-weight: unset; -} \ No newline at end of file +} + +.dots { + vertical-align: middle; + margin-left: 8px; +} + +.dots-small { + width: 12px !important; + height: 12px !important; +} + +.dots-medium { + width: 16px !important; + height: 16px !important; +} + +.dependency-item { + --padding-start: 20px; + --padding-end: 2px; +} diff --git a/ui/test/config.test.ts b/ui/test/config.test.ts index 3a00be3c9..6b2389aa4 100644 --- a/ui/test/config.test.ts +++ b/ui/test/config.test.ts @@ -1,16 +1,16 @@ import { displayUniqueBy } from '../src/app/app-config/config-cursor' -function assert(predicate: boolean, message: string) { +function assert (predicate: boolean, message: string) { if (!predicate) { throw new Error('Assertion Failed: ' + message) } } -function assertEq(a: any, b: any, message: string) { +function assertEq (a: any, b: any, message: string) { assert(a === b, message) } -function test() { +function test () { assertEq( displayUniqueBy( 'foo', @@ -28,22 +28,22 @@ function test() { }, nullByDefault: false, nullable: false, - uniqueBy: 'foo' + uniqueBy: 'foo', }, { foo: 'foo-val', - } + }, ), 'Foo', - 'base string uses name mapping' + 'base string uses name mapping', ) assertEq( displayUniqueBy( { any: [ 'foo', - 'bar' - ] + 'bar', + ], }, { type: 'object', @@ -69,25 +69,25 @@ function test() { uniqueBy: { any: [ 'foo', - 'bar' - ] - } + 'bar', + ], + }, }, { foo: 'foo-val', bar: 'bar-val', - } + }, ), 'Foo and Bar', - '`any` must be joined with `and`' + '`any` must be joined with `and`', ) assertEq( displayUniqueBy( { all: [ 'foo', - 'bar' - ] + 'bar', + ], }, { type: 'object', @@ -113,17 +113,17 @@ function test() { uniqueBy: { all: [ 'foo', - 'bar' - ] - } + 'bar', + ], + }, }, { foo: 'foo-val', bar: 'bar-val', - } + }, ), 'Foo or Bar', - '`all` must be joined with `or`' + '`all` must be joined with `or`', ) assertEq( displayUniqueBy( @@ -133,10 +133,10 @@ function test() { { all: [ 'bar', - 'baz' - ] - } - ] + 'baz', + ], + }, + ], }, { type: 'object', @@ -162,7 +162,7 @@ function test() { nullable: true, copyable: false, masked: false, - } + }, }, nullByDefault: false, nullable: false, @@ -172,20 +172,20 @@ function test() { { all: [ 'bar', - 'baz' - ] - } - ] - } + 'baz', + ], + }, + ], + }, }, { foo: 'foo-val', bar: 'bar-val', baz: 'baz-val', - } + }, ), 'Foo and (Bar or Baz)', - '`any` of `all` is correct' + '`any` of `all` is correct', ) assertEq( displayUniqueBy( @@ -195,10 +195,10 @@ function test() { { all: [ 'bar', - 'baz' - ] - } - ] + 'baz', + ], + }, + ], }, { type: 'union', @@ -208,8 +208,8 @@ function test() { name: 'Variant', variantNames: { 'variant-a': 'Variant A', - 'variant-b': 'Variant B' - } + 'variant-b': 'Variant B', + }, }, variants: { 'variant-a': { @@ -233,9 +233,9 @@ function test() { nullable: true, copyable: false, masked: false, - } + }, }, - 'variant-b': {}, + 'variant-b': { }, }, uniqueBy: { any: [ @@ -243,10 +243,10 @@ function test() { { all: [ 'bar', - 'baz' - ] - } - ] + 'baz', + ], + }, + ], }, default: 'variant-a', }, @@ -255,9 +255,9 @@ function test() { foo: 'foo-val', bar: 'bar-val', baz: 'baz-val', - } + }, ), 'Foo and (Bar or Baz)', - 'union is correct' + 'union is correct', ) } diff --git a/ui/ui-config.json b/ui/ui-config.json new file mode 100644 index 000000000..9033f5cde --- /dev/null +++ b/ui/ui-config.json @@ -0,0 +1,22 @@ +{ + "patchDb": { + "timeoutForMissingRevision": 5000, + "poll": { + "cooldown": 40000 + }, + "websocket": { + "type": "ws", + "url": "", + "version": 0 + }, + "usePollOverride": true + }, + "api": { + "mocks": true, + "url": "/api", + "version": "v1", + "root": "" + }, + "maskAs": "tor", + "skipStartupAlerts": true +} diff --git a/ui/use-mocks.json b/ui/use-mocks.json deleted file mode 100644 index 2068a78fa..000000000 --- a/ui/use-mocks.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "useMocks": true, - "mockOver": "tor", - "skipStartupAlerts": true -}